Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 24th, 2012  |  syntax: None  |  size: 3.30 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How to redirect output in an app run on mono (c#) on Linux to avoid 'Array index is out of range.' when multiple threads write to console?
  2. FileStream fsOut = new FileStream(filename, FileMode.Append, FileAccess.Write);
  3. swOut = new StreamWriter(fsOut);
  4. Console.SetOut(swOut);
  5. Console.SetError(swOut);
  6.        
  7. private StreamWriter _swOut = null;
  8.        
  9. [TestCase(100, "output.txt")]
  10.     public void RawThreadsTests(int howMany, string filename) {
  11.         FileStream fsOut = new FileStream(filename, FileMode.Append, FileAccess.Write);
  12.         _swOut = new StreamWriter(fsOut);
  13.         Console.SetOut(_swOut);
  14.         Console.SetError(_swOut);
  15.  
  16.         Thread[] threads = new Thread[howMany];
  17.         Container c = TestContainer;
  18.  
  19.         for(int i = 0; i < howMany; i++) {
  20.             threads[i] = new Thread(unused => Write());
  21.             threads[i].Start();
  22.         }
  23.         //Wait for all threads
  24.         for(int i = 0; i < howMany; i++) {
  25.             threads[i].Join();
  26.         }
  27.     }
  28.        
  29. static void Write() {
  30.             Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
  31.         }
  32.        
  33. (..).RawThreadsTests(100,"output.txt") : System.IndexOutOfRangeException: Array index is out of range.
  34.   at System.IO.StreamWriter.LowLevelWrite (System.String s) [0x00000] in :0
  35.   at System.IO.StreamWriter.Write (System.String value) [0x00000] in :0
  36.   at System.IO.TextWriter.WriteLine (System.String value) [0x00000] in :0
  37.   at System.Console.WriteLine (System.String value) [0x00000] in :0
  38.        
  39. (..).RawThreadsTests(100,"output.txt") : System.ArgumentException: Reading would overrun buffer
  40.   at System.IO.FileStream.Write (System.Byte[] array, Int32 offset, Int32 count) [0x00000] in :0
  41.   at System.IO.StreamWriter.FlushBytes () [0x00000] in :0
  42.   at System.IO.StreamWriter.Decode () [0x00000] in :0
  43.   at System.IO.StreamWriter.LowLevelWrite (System.String s) [0x00000] in :0
  44.   at System.IO.StreamWriter.Write (System.String value) [0x00000] in :0
  45.   at System.IO.TextWriter.WriteLine (System.String value) [0x00000] in :0
  46.   at System.Console.WriteLine (System.String value) [0x00000] in :0