2013-09-05 17 views
0

我想控制檯輸出重定向到一個列表框,但是當我寫的文本控制檯從不同的線程,它拋出一個InvalidOperationException重定向控制檯輸出到列表框從另一個線程拋出InvalidOperationException異常

ListBoxWriter:

public class ListBoxWriter : TextWriter 
    { 
     private ListBox list; 
     private StringBuilder content = new StringBuilder(); 

     public ListBoxWriter(ListBox list) 
     { 
      this.list = list; 
     } 

     public override void Write(char value) 
     { 
      base.Write(value); 
      content.Append(value); 
      if (value == '\n') 
      { 
       list.Items.Add(content.ToString()); 
       content = new StringBuilder(); 
      } 
     } 

     public override Encoding Encoding 
     { 
      get { return System.Text.Encoding.UTF8; } 
     } 
    } 
+2

哪裏是你的線程? – Rohit

+0

@Kyle我的線程不使用任何的代碼,而只是使用'Console.writeline(「文本」)' – 2016mfransen

回答

1

你從另一個線程,這意味着u必須添加項目到列表中時使用的調度員訪問UI。

public class ListBoxWriter : TextWriter 
    { 
     private ListBox list; 
     private StringBuilder content = new StringBuilder(); 

     public ListBoxWriter(ListBox list) 
     { 
      this.list = list; 
     } 

     public override void Write(char value) 
     { 
      base.Write(value); 
      content.Append(value); 
      if (value == '\n') 
      { 
       list.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => list.Items.Add(content.ToString())));      
       content = new StringBuilder(); 
      } 
     } 

     public override Encoding Encoding 
     { 
      get { return System.Text.Encoding.UTF8; } 
     } 
    } 
+0

感謝名單,生病試試這個,看看它是否工作 – 2016mfransen

+0

的Wooo它的工作原理! thanx爲您提供幫助! – 2016mfransen

相關問題