WinForm窗體調(diào)用WCF服務(wù)窗體卡死問題
更新時間:2012年12月29日 10:39:05 作者:
在Winform窗體中調(diào)用部署在其他服務(wù)器中的WCF服務(wù)時,由于調(diào)用服務(wù)需要一定時延,因此窗體在這段時間一直卡住不能進(jìn)行其他操作
窗體啟動會啟動一個程序主線程,如果在From_Load()方法中調(diào)用服務(wù),調(diào)用服務(wù)操作會阻塞主程序。
只需要將調(diào)用服務(wù)的操作放到其他線程中處理就可以解決這個問題。
比如:
Thread ServiceThread=null;
public void TestForm_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
ServiceThread = new Thread(new ThreadStart(RegService));
ServiceThread.Start();
}
private void RegService()
{
//這里實現(xiàn)注冊服務(wù)調(diào)用服務(wù)操作
}
注意:開啟了線程要記得關(guān)閉,不然當(dāng)關(guān)閉該窗體時其主進(jìn)程關(guān)不掉,因為還有線程存在??梢栽贔romClosed()方法里將該線程關(guān)閉。
private void TestForm_FormClosed(object sender, FormClosedEventArgs e)
{
ServiceThread.Abort();
Application.Exit();
}
只需要將調(diào)用服務(wù)的操作放到其他線程中處理就可以解決這個問題。
比如:
復(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()
{
//這里實現(xiàn)注冊服務(wù)調(diào)用服務(wù)操作
}
注意:開啟了線程要記得關(guān)閉,不然當(dāng)關(guān)閉該窗體時其主進(jìn)程關(guān)不掉,因為還有線程存在??梢栽贔romClosed()方法里將該線程關(guān)閉。
復(fù)制代碼 代碼如下:
private void TestForm_FormClosed(object sender, FormClosedEventArgs e)
{
ServiceThread.Abort();
Application.Exit();
}
您可能感興趣的文章:
相關(guān)文章
C#設(shè)計模式之ChainOfResponsibility職責(zé)鏈模式解決真假美猴王問題實例
這篇文章主要介紹了C#設(shè)計模式之ChainOfResponsibility職責(zé)鏈模式解決真假美猴王問題,簡單說明了責(zé)任鏈模式的概念,并結(jié)合《西游記》中真假美猴王故事背景為實例分析了責(zé)任鏈模式的具體使用技巧,需要的朋友可以參考下2017-09-09
C#循環(huán)與循環(huán)控制的表達(dá)式樹實現(xiàn)
這篇文章介紹了C#循環(huán)與循環(huán)控制的表達(dá)式樹實現(xiàn),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
淺析C#中的Main(String[] args)參數(shù)輸入問題
本篇文章主要是對C#中的Main(String[] args)參數(shù)輸入問題進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01

