java 线程访问控件_C#多线程与跨线程访问界面控件的方法
本文實(shí)例講述了C#多線程與跨線程訪問(wèn)界面控件的方法。分享給大家供大家參考。具體分析如下:
在編寫(xiě)WinForm訪問(wèn)WebService時(shí),常會(huì)遇到因?yàn)榫W(wǎng)絡(luò)延遲造成界面卡死的現(xiàn)象。啟用新線程去訪問(wèn)WebService是一個(gè)可行的方法。
典型的,有下面的啟動(dòng)新線程示例:
private void LoadRemoteAppVersion()
{
if (FileName.Text.Trim() == "") return;
StatusLabel.Text = "正在加載";
S_Controllers_Bins.S_Controllers_BinsSoapClient service = new S_Controllers_Bins.S_Controllers_BinsSoapClient();
S_Controllers_Bins.Controllers_Bins m = service.QueryFileName(FileName.Text.Trim());
if (m != null)
{
//todo:
StatusLabel.Text = "加載成功";
}else
StatusLabel.Text = "加載失敗";
}
private void BtnLoadBinInformation(object sender, EventArgs e)
{
Thread nonParameterThread = new Thread(new ThreadStart(LoadRemoteAppVersion));
nonParameterThread.Start();
}
運(yùn)行程序的時(shí)候,如果要在線程里操作界面控件,可能會(huì)提示不能跨線程訪問(wèn)界面控件,有兩種處理方法:
1.啟動(dòng)程序改一下:
///
/// 應(yīng)用程序的主入口點(diǎn)。
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
2.使用委托
public delegate void LoadRemoteAppVersionDelegate(); //定義委托變量
private void BtnLoadBinInformation(object sender, EventArgs e)
{
LoadRemoteAppVersionDelegate func = new LoadRemoteAppVersionDelegate(LoadRemoteAppVersion);//LoadRemoteAppVersion不用修改
func.BeginInvoke(null, null);
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
總結(jié)
以上是生活随笔為你收集整理的java 线程访问控件_C#多线程与跨线程访问界面控件的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 判断进程状态_获取远程服务器上
- 下一篇: filesystemwatch java