0

BackgroundWorkerXMLPutMessages_DoWorkサブの一部であるこのコードがあります。

Try
            PublicMQVariable.MQMessage_Reply = New MQMessage
            PublicMQVariable.MQMessage_Reply.CorrelationId = PublicMQVariable.MQMessage_Request.MessageId
            PublicMQVariable.MQMessage_Reply.MessageType = MQC.MQMT_REPLY
            PublicMQVariable.MQGetMessageOptions_Reply = New MQGetMessageOptions
            PublicMQVariable.MQGetMessageOptions_Reply.Options = MQC.MQGMO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING
            PublicMQVariable.MQGetMessageOptions_Reply.MatchOptions = MQC.MQMO_MATCH_CORREL_ID
            PublicMQVariable.MQGetMessageOptions_Reply.WaitInterval = My.Settings.MQ_ReplyTimeOut
            PublicMQVariable.MyStopwatch = New Stopwatch
            PublicMQVariable.MyStopwatch.Start()
            PublicMQVariable.MQQueue_Response.Get(PublicMQVariable.MQMessage_Reply, PublicMQVariable.MQGetMessageOptions_Reply)
            PublicMQVariable.MyStopwatch.Stop()
            PublicMQVariable.MyReplyMessage = PublicMQVariable.MQMessage_Reply.ReadString(PublicMQVariable.MQMessage_Reply.MessageLength)
        Catch ex As MQException
            MsgBox("MQException: compCode: " & ex.CompCode.ToString() & " Reason: " + ex.Reason.ToString() & " - " & ex.Message)
            MQDisconnectAndClose()
            Return
        End Try

このコード ( ) が実行された瞬間に、上記の残りのコードを終了せずPublicMQVariable.MQQueue_Response.Get(PublicMQVariable.MQMessage_Reply, PublicMQVariable.MQGetMessageOptions_Reply)に に戻ります。BackgroundWorkerXMLPutMessages_RunWorkerCompleted

なぜこのようなことが起こるのでしょうか? また、この「時期尚早な完了」を防ぐにはどうすればよいですか?

4

1 に答える 1

2

例外で失敗しました。RunWorkerCompleted イベント ハンドラーで e.Error をチェックするのを忘れることは、非常によくある間違いです。Debug + Exceptions を使用するとデバッグが容易になり、CLR 例外の [Thrown] チェックボックスをオンにします。

于 2013-11-13T13:37:34.783 に答える