如何使用异步操作立即对Internet连接更改做出反应?

时间:2011-09-05 14:21:48

标签: c# windows winforms web-services asynchronous

在我的C#Windows窗体应用程序中,我通过Internet从WebServices检索一些数据。每秒刷新

它可以作为异步操作并且运行良好但是当应用程序与Internet断开连接时,它会显示异常,当它重新连接到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)

        }
    }

1 个答案:

答案 0 :(得分:0)

我可能会做以下事情:

  • 在每秒运行的计时器代码中,我会检查P / Invoke是否可以使用互联网连接(这比让服务抛出异常更快,看起来它适合你的原因,好)。对于某些参考,请查看here

    • 我会让P / invoke代码也暂时在某处设置一个标志(确保它是线程安全的)并且在进行任何Web服务调用之前,我会检查该标志是否处于有效状态以供客户端进行调用