C#多線程與跨線程拜訪界面控件的辦法。本站提示廣大學習愛好者:(C#多線程與跨線程拜訪界面控件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#多線程與跨線程拜訪界面控件的辦法正文
本文實例講述了C#多線程與跨線程拜訪界面控件的辦法。分享給年夜家供年夜家參考。詳細剖析以下:
在編寫WinForm拜訪WebService時,常會碰到由於收集延遲形成界面卡逝世的景象。啟用新線程去拜訪WebService是一個可行的辦法。
典范的,有上面的啟動新線程示例:
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();
}
運轉法式的時刻,假如要在線程裡操作界面控件,能夠會提醒不克不及跨線程拜訪界面控件,有兩種處置辦法:
1.啟動法式改一下:
/// <summary>
/// 運用法式的主進口點。
/// </summary>
[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);//<span >LoadRemoteAppVersion不消修正</span>
func.BeginInvoke(null, null);
}
願望本文所述對年夜家的C#法式設計有所贊助。