2017-05-26 59 views
0

我試圖從多個static methods更新RichTextBox控件。每次都要在很短的時間內添加大量文本。這是一種Client-Sever類型的應用程序,並且一個dll正在使用靜態處理程序。我正在使用下面的代碼,並且沒有任何文本正在通過靜態方法添加到RichTextBox中。我該如何解決?使用靜態方法更新RichTextBox

public partial class MyMainForm : Form 
    { 
     private static MyMainForm FrmReference; 

     private static void Handler1(object parameter, ConnectionEvent CE) 
     { 
      FrmReference.MyRichTextBox.AppendText(DateTime.Now + "....x...."); 
     } 

     private static void Handler2(object parameter, DataEvent DE) 
     { 
      FrmReference.MyRichTextBox.AppendText(DateTime.Now + "....y...."); 
     } 

     public MyMainForm() 
     { 
      InitializeComponent(); 
      FrmReference = this; 

     } 

     private void VNToolStripButtonStart_Click(object sender, EventArgs e) 
     { 
      con = new Connection("127.0.0.1", ConParams); 
      con.SetConnectionHandler(Handler1, null); 
      con.SetDataHandler(Handler2, null); 

      MyRichTextBox.AppendText(DateTime.Now + "....abc...."); 
     } 
    } 
+1

你確認你的處理程序叫什麼名字? –

+0

你在哪裏調用Handler1和Handler2?它沒有在你的代碼中顯示 –

+0

這個_static_選擇背後的原因是什麼? – Steve

回答

1

您的處理程序未被調用。

如果你嘗試這樣的事情,你會看到,這個問題是不是靜態方法應該寫進RichTextBox

public partial class Form1 : Form 
{ 
    private static Form1 frmReference; 

    private static void WriteToMyRichTextBox(string what) 
    { 
     frmReference.richTextBox1.AppendText(what); 
     frmReference.richTextBox1.AppendText(Environment.NewLine); 
    } 

    public Form1() 
    { 
     InitializeComponent(); 
     frmReference = this; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     WriteToMyRichTextBox(DateTime.Now.ToString()); 
    } 
} 
+0

正在調用處理程序,請參閱更新後的問題。問題似乎是異步調用的速度(幾乎<1秒),或者RichTextBox控件對所有這些操作的可訪問性。 – Varun

+0

@Varun他們從另一個線程調用? –

+0

@Varun試着把一個'Console.WriteLine($「{DateTime.Now.ToString()}:Handler叫做」);'在你的處理程序中,並顯示結果 –