Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用静态方法更新RichTextBox_C#_Winforms - Fatal编程技术网

C# 使用静态方法更新RichTextBox

C# 使用静态方法更新RichTextBox,c#,winforms,C#,Winforms,我正在尝试从多个静态方法更新RichTextBox控件。每次都要添加大量文本,并且间隔时间非常短。这是一种客户机-服务器类型的应用程序,dll正在使用静态处理程序。我正在使用下面的代码,没有任何文本从静态方法添加到RichTextBox中。我该如何解决这个问题 public partial class MyMainForm : Form { private static MyMainForm FrmReference; private stati

我正在尝试从多个
静态方法更新
RichTextBox
控件。每次都要添加大量文本,并且间隔时间非常短。这是一种客户机-服务器类型的应用程序,dll正在使用静态处理程序。我正在使用下面的代码,没有任何文本从静态方法添加到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....");
        }
    }

没有调用您的处理程序

如果您尝试类似的方法,您会发现问题不是应该写入
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());
    }
}

是否验证调用了处理程序?从何处调用Handler1和Handler2?它没有显示在你的代码中你的方法的静态选择背后的原因是什么?好的,实际上我忘了添加这一部分,同时保持问题简短!但是,是的,dll在后台调用它们,并执行它们打算执行的操作。它们在这里的定义如下:con=新连接(“127.0.0.1”,ConParams);con.SetConnectionHandler(Handler1,null);con.SetDataHandler(Handler2,null);正在调用处理程序,请参阅更新的问题。问题似乎在于异步调用的速度(几乎小于1秒)或RichTextBox控件对所有这些操作的可访问性。@Varun尝试放置一个
Console.WriteLine($“{DateTime.Now.ToString()}:调用的处理程序”)在处理程序中,并显示结果谢谢您的帮助!问题出在处理程序本身的一部分代码中。Console.Writeline有助于轻松调试。我还实现了这个方法WriteToMyRichTextBox(string what),并确保所有追加文本操作都是通过这个方法执行的。现在一切正常。谢谢