Csharp/C#教程:C#多线程与跨线程访问界面控件的方法分享

本文实例讲述了C#多线程与跨线程访问界面控件的方法。分享给大家供大家参考。具体分析如下:

在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象。启用新线程去访问WebService是一个可行的方法。

典型的,有下面的启动新线程示例:
代码如下:privatevoidLoadRemoteAppVersion() 

   if(FileName.Text.Trim()==””)return; 
   StatusLabel.Text=”正在加载”; 
   S_Controllers_Bins.S_Controllers_BinsSoapClientservice=newS_Controllers_Bins.S_Controllers_BinsSoapClient(); 
   S_Controllers_Bins.Controllers_Binsm=service.QueryFileName(FileName.Text.Trim()); 
   if(m!=null) 
   { 
       //todo: 
       StatusLabel.Text=”加载成功”; 
   }else 
       StatusLabel.Text=”加载失败”; 

privatevoidBtnLoadBinInformation(objectsender,EventArgse) 

   ThreadnonParameterThread=newThread(newThreadStart(LoadRemoteAppVersion)); 
   nonParameterThread.Start();   
}

运行程序的时候,如果要在线程里操作界面控件,可能会提示不能跨线程访问界面控件,有两种处理方法:

1.启动程序改一下:
代码如下:///<summary> 
///应用程序的主入口点。 
///</summary> 
[STAThread] 
staticvoidMain() 

   Application.EnableVisualStyles();  
   System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false; 
   Application.SetCompatibleTextRenderingDefault(false); 
   Application.Run(newForm1()); 
}
2.使用委托
代码如下:publicdelegatevoidLoadRemoteAppVersionDelegate();//定义委托变量
privatevoidBtnLoadBinInformation(objectsender,EventArgse) 

   LoadRemoteAppVersionDelegatefunc=newLoadRemoteAppVersionDelegate(LoadRemoteAppVersion);//<spanstyle=”font-family:Arial,Helvetica,sans-serif;”>LoadRemoteAppVersion不用修改</span> 
   func.BeginInvoke(null,null); 
}

希望本文所述对大家的C#程序设计有所帮助。

您可能感兴趣的文章:C#Winform子窗体访问父级窗体的控件和属性C#使用Aspose.Cells控件读取ExcelC#实现多选项卡的浏览器控件C#实现用户自定义控件中嵌入自己的图标C#实现读取DataSet数据并显示在ListView控件中的方法C#实现DataGridView控件行列互换的方法C#日期控件datetimepicker保存空值的三种方法C#后台创建控件并获取值的方法C#实现简单的loading提示控件实例代码

标签: 线程 多线程 方法 界面

关于函数调用方式__stdcall和__cdecl详解

排列和组合算法的实现方法_C语言经典案例

上述就是C#学习教程:C#多线程与跨线程访问界面控件的方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/906041.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐