Problém s výjimkou v BackgroundWorkeru   zodpovězená otázka

Visual Studio, .NET

Dobrý den,

mám následující problém s výjimkou uvnitř BackgroundWorkeru.

Normálně se na pozadí spusí vlákno BackgroundWorkeru (RunWorkerAsync) s tímhle kódem:

    Private Function CopyingFiles( _
    ByVal bw As BackgroundWorker, _
    ByVal files As List(Of FileToCopy)) As Boolean

    Throw New Exception("Chybka !")

    Return False

    End Function

Chci nějak docílit toho, aby se chyba dostala až do zpracování ukončení vlákna, kde je její obsluha:

    Private Sub backgroundWorker1_RunWorkerCompleted( _
    ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) _
    Handles BackgroundWorker1.RunWorkerCompleted

        If e.Cancelled Then
            MessageBox.Show("Operation was canceled")
        ElseIf (e.Error IsNot Nothing) Then
            Dim msg As String = String.Format("An error occurred: {0}", e.Error.Message)
            MessageBox.Show(msg)
        Else
            lblCopyOk.Visible = True
        End If

    End Sub

Chyba ale vyskočí už ve funkci CopyingFiles (aplikace se zastaví a vyskočí klasické chybové hlášení VisualStudia). Pokud program bez jakýchkoli oprav pustím dál, tak chyba se dostane správně až do backgroundWorker1_RunWorkerCompleted a tam se správně zpracuje.

Jak se dá zařídit, aby ta chyba nevyskočila hned a jen se přenesla do obsluhy konce vlákna?

(Přitom s kódem vycházím z příkladu v lokální nápovědě VS:

"Walkthrough: Running an Operation in the Background"

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dv_mclictl/html/1b9a4e0a-f134-48ff-a1be-c461446a31ba.htm

)

Předem díky moc za pomoc :-)

Lukáš

nahlásit spamnahlásit spam 0 odpovědětodpovědět

K první části kódu: Kód Return False se nikdy neprovede, jakmile vyvoláte vyjímku pomocí Throw tak kód dále nepokračuje. To že se vám zobrazuje dialogové okno s neošetřenou vyjímkou ve Visual Studiu je pouze záležitost nastavení Visual Studia, zkuste si spustit program ručně mimo vývojové prostředí a uvidíte, že se to bude chovat tak jak očekáváte. V nastavení vyjímek ve Visual Studiu (nabídka Debug/Exceptions...) se dá nastavit, u kterých vyjímek se má Visual Studio pozastavit (výchozí nastavení určuje, že se má pozastavit u všech neošetřených vyjímek což je z důvodu ladění).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Aha - díky. Ono to return tam zůstalo po odmazání kódu, který nebyl pro popis důležitý. Každopádně jsem myslel, že se to ještě po výjimce do kódu vrátí. Zas vim něco novýho :-)

Ale hlavně díky za to info o vyskakování chyb. Máte pravdu - když se to spustí samostatně, tak to nevyskočí. A já se tady s tim trápil dobrý dvě hodiny :-(

Jak píšete o Debug/Exceptions... to je asi jen v plné verzi VS, ne? Já mám Express edici a tam nic takovýho nevidim... :-/

Lukáš

nahlásit spamnahlásit spam 0 odpovědětodpovědět

á - už jsem to našel - je to nahoře v menu... :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback