C#使用异步委托在另一个线程上更新窗体不能省略可选参数

Posted X2009

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#使用异步委托在另一个线程上更新窗体不能省略可选参数相关的知识,希望对你有一定的参考价值。

使用button1更新label1:

        private delegate void UpdateFormInvoke(string a, string b = "B");
        private void UpdateForm(string a, string b = "B")
        {
            label1.Text = a + " - " + b;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(Test);
            th.Start();
        }

        void Test()
        {
            UpdateFormInvoke uli = new UpdateFormInvoke(UpdateForm);
            this.BeginInvoke(uli, new object[] { "A" });
        }

 

参数计数不匹配异常:

 

 

修改代码1:

        private delegate void UpdateFormInvoke(string a, string b = "B");
        private void UpdateForm(string a, string b)
        {
            label1.Text = a + " - " + b;
        }

 

修改代码2:

        private delegate void UpdateFormInvoke(string a, string b);
        private void UpdateForm(string a, string b = "B")
        {
            label1.Text = a + " - " + b;
        }

 

结果出现相同的错误

 

修改代码3:

        void Test()
        {
            UpdateFormInvoke uli = new UpdateFormInvoke(UpdateForm);
            this.BeginInvoke(uli, new object[] { "A", "B" });
        }

 

不省略可选参数,无异常。

 

以上是关于C#使用异步委托在另一个线程上更新窗体不能省略可选参数的主要内容,如果未能解决你的问题,请参考以下文章

c#如何使用委托 触发另一个窗体的按钮刷新另一窗体

C#如何在另一个类的线程中对Textbox内容进行修改?

C# Winform 多线程异步委托进度条

C# mouseUp事件

c#如何跨线程调用窗体控件

类型安全的 Control.Invoke C#