webForumDet fria alternativet

Fånga undantag som kastas i asynkron metod

.NET

3 svar · 427 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Frågan#1

Ännu en nybörjarfråga från en som försöker lära sig.

Jag håller på att göra om ett funktionsanrop från synkront till asynkront. Funktionen kastar undantag då och då, vilket jag tidigare har fångat genom:

try {
    a = DoStuffInDatabase(variable);
} catch (Exception e) {
    // Undantag kastades. Lös problemet!
}

Men hur fångar jag mina undantag om jag gör anropet asynkront? Jag har provat att försöka fånga både vid anropet och när resultatet ska hämtas, men det fungerar inte.

try {
    DoStuffDelegate dlgt = new DoStuffDelegate(DoStuffInDatabase);
    AsyncCallback cb = new AsyncCallback(cbFunc);
    dlgt.BeginInvoke(variable, cb, dlgt);
} catch (Exception e) {
    // Undantag kastades. Lös problemet!
}

....
private void cbFunc(IAsyncResult result) {
    try{
        DoStuffDelegate dlgt = (DoStuffDelegate) result.AsyncState;
        a = dlgt.EndInvoke(result)
    }catch (Exception e) {
        // Undantag kastades. Lös problemet!
    }
}

Hur gör man tro? :)

Medlem sedan aug. 20003 575 inlägg
#2
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException
Medlem sedan mars 20025 907 inlägg
#3

Hmm, gick inte så bra det där. Provade först att lägga till den koden precis innan jag gör mitt asynkrona anrop, men det blev ingen skillnad. Sen provade jag att lägga den i min defaultkonstruktor till mitt huvud-window. Ingen skillnad där heller, undantaget fångas inte. Googlade upp ett exempel. Där har de lagt koden i main-metoden, i wpf finns ingen main-metod, var lägger jag den då?

/Per

Medlem sedan aug. 20003 575 inlägg
#4

Du ovverridar OnApplicationStartup eller vad den heter i App.xaml.cs :)

284 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
158 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)