怎么在c#中利用WinForm上实现一个跨线程修改UI界面的功能

  介绍

这篇文章给大家介绍怎么在c#中利用WinForm上实现一个跨线程修改UI界面的功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

背景

在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作。他们会引发软件的卡顿甚至假死,严重影响软件的使用。因此,这类耗时或阻塞的操作一般都会使用异步的方式去执行,不影响主线程(UI线程)与用户间的交互。但多个线程竞争读写同一个资源往往会造成意想不到的意外结果,UI界面也是一种资源,所以跨线程修改UI界面往往被加以限制。而在WinForm中,跨线程修改UI界面同样是不被允许的。在子线程中修改界面控件时Visual Studio会报出如下错误:

怎么在c#中利用WinForm上实现一个跨线程修改UI界面的功能

解决思路

。净提供了很多跨线程修改UI的方法,每种方法也有与之对应的工具类。我最常用的方法是ThreadPool +委托的方式完成跨线程对UI对的修改。

实例代码

1,定义委托,把内容写在控件里面

private  delegate  void  SetLabelDelegate (string 价值);      ,,,private  delegate  void  SetLabelDelegate2 (string 价值);      ,,,private  void  SetText (string 价值)   ,,,{   ,,,,,if  (this.InvokeRequired)   ,,,,,{   ,,,,,,,SetLabelDelegate  d =, new  SetLabelDelegate SetText ();   ,,,,,,,this.Invoke (d, new 对象[],{,value });   ,,,,,}   ,,,,,   ,,,,,{   ,,,,,,,txtbigcrmresult.Text =, value.ToString (), +, txtbigcrmresult.Text;   ,,,,,}   ,,,}

2,定义方法,线程调用

private  void  button3_Click (object ,发送方,EventArgs  e)   ,,,{   ,,,,,ThreadPool.QueueUserWorkItem (new  WaitCallback (dao),“test");   ,,,}   ,private  void 刀(object  url)   ,,,{   ,,,,,IDbConnection  conn =, new  SqlConnection (txtbigcrmui.Text);   ,,,,,SetText (“\ r \ n", +,“时);   ,,,.........................   ,,,,,SetText (“\ r \ n", +,“以何种;);   ,,,}

3,更新ui控件

, SetText (“\ r \ n", +,“时),

关于怎么在c#中利用WinForm上实现一个跨线程修改ui界面的功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

怎么在c#中利用WinForm上实现一个跨线程修改UI界面的功能