软件编程
位置:首页>> 软件编程>> C#编程>> C# winform跨线程操作控件的实现

C# winform跨线程操作控件的实现

作者:xwwwill  发布时间:2023-06-15 16:32:41 

标签:C#,winform,跨线程

前提:当我们使用Winform开发的时候,经常会遇到:System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxxx”的线程访问它。”

原因:发生次异常的原因是因为winform在渲染UI界面和操作界面数据的时候使用的是同一个线程。当我们创建另外一个线程,去操作此线程的UI控件,会导致线程不安全。winform为了防止线程不安全,因此杜绝了这个跨线程操作,并且抛出异常。

异常举例:创建两个控件,一个是按钮控件,一个是lable控件

private void button1_Click(object sender, EventArgs e)
       {
           Thread thread = new Thread(()=>
           {
               if (this.InvokeRequired)
               {
                   this.Invoke(new Action(() =>
                   {
                       lable1.Text = "Hello Thread!";
                   }));
               }
           }
           );
           thread.IsBackground = true;
           thread.Start();
       }

当执行此按钮的时候,会导致跨线程操作异常。

解决方案:

使用InvokeRequired属性,判断是否是线程安全。

if (this.InvokeRequired)
{
   this.Invoke(new Action(() =>
   {
       lable1.Text = "Hello World!";
   }));
}
else
{
   lable1.Text = "Hello World!";
}

来源:https://blog.csdn.net/xwwwill/article/details/124151362

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com