2011-09-05 44 views
1

在我的C#Windows窗體應用程序中,我通過Internet從WebServices檢索了一些數據。每秒刷新一次如何立即對異步操作的Internet連接更改作出反應?

它作爲異步操作,運行良好,但每當應用程序從Internet斷開連接時,它將顯示一個異常,並且在重新連接到Internet時,程序應自動並立即運行

目前,該程序需要一分多鐘才能重新開始工作,並且我希望異常在連接丟失時被忽略。

它每秒鐘刷新一次,這意味着有大量的在同一時間和 當他們全部完成正在運行的線程,那麼它涉及到連接

我可以使用哪些解決方案,因此我的程序運行的ASAP當Internet連接?

public void loadbalance() 
    { 
     try { //Get Data from Internet } 
     catch { } 
    } 

    delegate void loadbalancedelegate(); 

    public void loadBalanceAsync() 
    { 
     loadbalancedelegate worker = new loadbalancedelegate(loadbalance); 
     AsyncCallback LoadbalnceCallBack = new AsyncCallback(loadbalanceCompleted); 

     AsyncOperation async = AsyncOperationManager.CreateOperation(null); 
     worker.BeginInvoke(LoadbalnceCallBack,async); 
    } 

    public void loadbalanceCompleted(IAsyncResult result) 
    { 
     loadbalancedelegate worker = (loadbalancedelegate) ((AsyncResult)result).AsyncDelegate; 
     AsyncOperation async = (AsyncOperation)result.AsyncState; 

     worker.EndInvoke(result); 
    } 

    delegate void setControlsBalanceDelegate(BalanceOB ball); 

    void setControlsBalance(BalanceOB ball) 
    { 
     if (this.InvokeRequired) 
      this.Invoke(new setControlsBalanceDelegate(this.setControlsBalance), new 
      object[] { ball }); 
     else 
     { //Update Data on Form (Windows App) 

     } 
    } 
+0

依然沒能找到任何解決辦法,有辦法,如果我們可以檢查互聯網連接每次操作前,但其效率不高 – kawafan

回答

0

我可能會做到以下幾點:

  • 在其中運行的每一秒你的計時器代碼,我會檢查,如果互聯網連接可用以P/Invoke的(這比有更快的方式該服務會拋出異常,並且看起來也會適合您的原因)。對於一些參考一下here

    • 我將有P /調用代碼還設置了標誌暫時某處(確保它是線程安全的),使任何Web服務調用之前,我會檢查,如果該標識在一客戶進行該呼叫的有效狀態。