c # - Sådan reagerer du øjeblikkeligt på internetforbindelsesændringer med Async-operationer?

Indlæg af Hanne Mølgaard Plasc

Problem



I min C # Windows Forms-applikation henter jeg nogle data fra WebServices via internettet. Opdater hvert sekund


Det fungerer som asynkron operationer og fungerer godt, men når applikationen afbrydes fra internettet, viser den en undtagelse, og når den genopretter forbindelse til internettet, skal programmet fungere automatisk og straks .


I øjeblikket tager programmet mere end et minut at begynde at arbejde igen, og jeg vil gerne have undtagelsen ignoreret, når forbindelsen falder.


det opdateres hvert sekund, det betyder, at der er masser af tråde kører på samme tid og
når de alle er færdige, så kommer det til at forbinde


Hvilken løsning kan jeg bruge, så mine programmer kører ASAP når internet forbinder?


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)

        }
    }

Bedste reference


Jeg vil nok gøre følgende:



  • I din timer kode, der kører hvert sekund, vil jeg kontrollere, om internetforbindelsen er tilgængelig af P/Invoke (hvilket er hurtigere end at have tjenesten kaste en undtagelse, og ser ud til at det også passer til din sag). For nogle referencer se her



    • Jeg vil have P/invoke-koden også angive et flag midlertidigt et sted (sørg for, at det er tråd sikkert), og inden jeg foretager nogen webservicesamtaler, vil jeg kontrollere, om flagret er i en gyldig tilstand for at klienten kan gøre det ringe til.