2017-05-26 26 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叫做”);'在你的处理程序中,并显示结果 –