2011-09-05 47 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服务调用之前,我会检查,如果该标识在一客户进行该呼叫的有效状态。