【问题标题】:How to react instantly to Internet Connectivity changes with Async operations?如何通过异步操作立即对 Internet 连接更改做出反应?
【发布时间】:2011-09-05 14:21:48
【问题描述】:

在我的 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)

        }
    }

【问题讨论】:

  • 仍然找不到任何解决方案,如果我们可以在每次操作之前检查互联网连接,但效率不高

标签: c# windows winforms web-services asynchronous


【解决方案1】:

我可能会做以下事情:

  • 在您每秒运行的计时器代码中,我会检查 P/Invoke 是否可以使用 Internet 连接(这比让服务抛出异常更快,而且看起来也适合您的原因)。一些参考看here

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2023-04-05
    • 2015-05-09
    相关资源
    最近更新 更多