WinForm窗體調(diào)用WCF服務(wù)窗體卡死問題
更新時(shí)間:2012年12月29日 10:39:05 作者:
在Winform窗體中調(diào)用部署在其他服務(wù)器中的WCF服務(wù)時(shí),由于調(diào)用服務(wù)需要一定時(shí)延,因此窗體在這段時(shí)間一直卡住不能進(jìn)行其他操作
窗體啟動(dòng)會(huì)啟動(dòng)一個(gè)程序主線程,如果在From_Load()方法中調(diào)用服務(wù),調(diào)用服務(wù)操作會(huì)阻塞主程序。
只需要將調(diào)用服務(wù)的操作放到其他線程中處理就可以解決這個(gè)問題。
比如:
Thread ServiceThread=null;
public void TestForm_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
ServiceThread = new Thread(new ThreadStart(RegService));
ServiceThread.Start();
}
private void RegService()
{
//這里實(shí)現(xiàn)注冊(cè)服務(wù)調(diào)用服務(wù)操作
}
注意:開啟了線程要記得關(guān)閉,不然當(dāng)關(guān)閉該窗體時(shí)其主進(jìn)程關(guān)不掉,因?yàn)檫€有線程存在。可以在FromClosed()方法里將該線程關(guān)閉。
private void TestForm_FormClosed(object sender, FormClosedEventArgs e)
{
ServiceThread.Abort();
Application.Exit();
}
只需要將調(diào)用服務(wù)的操作放到其他線程中處理就可以解決這個(gè)問題。
比如:
復(fù)制代碼 代碼如下:
Thread ServiceThread=null;
public void TestForm_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
ServiceThread = new Thread(new ThreadStart(RegService));
ServiceThread.Start();
}
private void RegService()
{
//這里實(shí)現(xiàn)注冊(cè)服務(wù)調(diào)用服務(wù)操作
}
注意:開啟了線程要記得關(guān)閉,不然當(dāng)關(guān)閉該窗體時(shí)其主進(jìn)程關(guān)不掉,因?yàn)檫€有線程存在。可以在FromClosed()方法里將該線程關(guān)閉。
復(fù)制代碼 代碼如下:
private void TestForm_FormClosed(object sender, FormClosedEventArgs e)
{
ServiceThread.Abort();
Application.Exit();
}
您可能感興趣的文章:
相關(guān)文章
C#如何Task執(zhí)行任務(wù),等待任務(wù)完成
這篇文章主要介紹了C#如何Task執(zhí)行任務(wù),等待任務(wù)完成,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼
C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼,需要的朋友可以參考一下2013-03-03
WPF+ASP.NET SignalR實(shí)現(xiàn)后臺(tái)通知功能的示例代碼
本文以一個(gè)簡(jiǎn)單示例,簡(jiǎn)述如何通過WPF+ASP.NET SignalR實(shí)現(xiàn)消息后臺(tái)通知以及數(shù)據(jù)的實(shí)時(shí)刷新,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正2022-09-09
c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問題困擾
這篇文章主要介紹了c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問題困擾,需要的朋友可以參考下2020-04-04

