Завершение программы .NET Winform без какой-либо уважительной причины в End Sub - PullRequest
2 голосов
/ 07 октября 2011

Я использую agsXMPP в своем проекте .NET (WinForms). У меня есть следующий блок кода, он выполняется всякий раз, когда от любого клиента поступает сообщение.Теперь, когда получено сообщение, этот блок выполняется и программа завершается .. :( Я понятия не имею, что происходит. Справка!

Это как-то связано с потоками? (Я слышал, чтоagsXMPP инкапсулирует поток, в котором он работает)

   Private Sub messageReceived(ByVal sender As Object, ByVal msg As protocol.client.Message)
    Dim chatMessage() As String
    Static Dim Hi_ed As Integer = 0
    chatMessage = msg.From.ToString.Split("/")
    Dim chatSender As String = chatMessage(0)

    If Not IsWorking Then
        IsWorking = True
        If Not ProcessCommands(msg.Body, chatSender) Then
            Dim sStr As String = ParseEnglish(msg.Body)

            Select Case sStr
                Case "HI"
                    If Hi_ed = False Then
                        SendGTalkMsg("Hi. How do you do?", chatSender)
                        Hi_ed = True
                    Else
                        SendGTalkMsg("हाय वाई कुछ नहीं हम तो !!!", chatSender)
                    End If
                Case "DETAILS PLEASE"
                    SendGTalkMsg(". Currently there are N no of sams running on me: :)", chatSender)
            End Select
        End If
        IsWorking = False

        Exit Sub
    Else
        SendGTalkMsg("I'm working right now. Please have patience.", chatSender)
    End If
End Sub

** РЕДАКТИРОВАТЬ **** Сейчас, когда я запускаю сгенерированный EXE-файл, после того, как это событие сделано, появляется ошибка «не отвечает», что ясно означает, что есть исключение, но оно выходит из блока try catch.: (

Этоошибка, которую я получаю:

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01:   updatecheck.exe
Problem Signature 02:   1.0.0.0
Problem Signature 03:   4e8ed73e
Problem Signature 04:   mscorlib
Problem Signature 05:   4.0.0.0
Problem Signature 06:   4dd23522
Problem Signature 07:   1526
Problem Signature 08:   4f
Problem Signature 09:   System.InvalidOperationException
OS Version:  6.1.7600.2.0.0.256.1
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2:   0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4:   0a9e372d3b4ad19135b953a78882e789

Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement       
offline:
C:\Windows\system32\en-US\erofflps.txt

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Ну, хорошо, хорошо. Это все из-за глупого диалогового окна для

My.Computer.Network.DownloadFile(SourceZipFile, DestinationZipFile, "<userid>", "<password>", True, 100000, True)

было установлено в true. Таким образом, всякий раз, когда появлялось окно прогресса загрузки файла, оно портило потоки. Когда я изменил ShowUI параметр DownloadFile на False все работало нормально. :)

Но у нас есть четкое объяснение этому?

0 голосов
/ 07 октября 2011

Скорее всего, это связано с сочетанием потоков и необработанным исключением.Кажется, что нет способа контролировать поведение необработанных исключений для любого, кроме основного потока, поэтому обязательно , чтобы вы обрабатывали все исключения, которые могут возникнуть за пределами основного потока.Это включает в себя асинхронные обратные вызовы, такие как выше, так как они часто выполняются из основного потока.Если исключение не обрабатывается в неосновном потоке, приложение просто завершается;нет сообщения.

Я бы порекомендовал обернуть все обратные вызовы и другие асинхронные методы в блок try ... catch, который регистрирует ошибку или записывает ее в окно трассировки отладки.

...