Как мгновенно реагировать на изменения подключения к Интернету с помощью асинхронных операций? - PullRequest
1 голос
/ 05 сентября 2011

В моем приложении C # Windows Forms я получаю некоторые данные из WebServices через Интернет. Обновлять каждую секунду

Он работает как асинхронные операции и работает хорошо, но всякий раз, когда приложение отключается от Интернета, оно выдает исключение, а при повторном подключении к Интернету программа должна работать автоматически и немедленно .

В настоящее время программе требуется более одной минуты, чтобы начать работать снова, и я хотел бы, чтобы исключение было проигнорировано при разрыве соединения.

обновляется каждую секунду, это означает, что одновременно работает множество потоков и когда они все закончили, тогда дело доходит до подключения

Какое решение я могу использовать, чтобы мои программы работали как можно скорее при подключении к Интернету?

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 голосов
/ 06 сентября 2011

Я бы, вероятно, сделал следующее:

  • В вашем коде таймера, который запускается каждую секунду, я бы проверил, доступно ли подключение к Интернету через P / Invoke (что является более быстрым способом, чем служба генерирует исключение, и выглядит так, как если бы оно соответствовало вашей причине как Что ж). Для справки смотрите здесь

    • Я хотел бы, чтобы код P / invoke также где-то временно устанавливал флаг (убедитесь, что он является потокобезопасным), и перед тем, как делать какие-либо вызовы веб-службы, я бы проверил, находится ли флаг в допустимом состоянии, чтобы клиент мог сделать это звоните.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...