2

クラスのメソッドを呼び出す BackgroundWorker があります。このメソッドには、BackgroundWorker への参照が与えられ、進行状況を報告できるようになっています。この疑似コードは概要を示しています。

void BackgroundWorker_DoWork( object sender )
{
    BackgroundWorker w = sender as BackgroundWorker;
    var c = new ProcessingClass()
    c.someMethod( w )
}

class ProcessingClass()
{
    someMethod( BackgroundWorker w )
    {
        w.ReportProgress(50)
        //calculations...
    }
}

問題は、進捗状況を報告した後に「計算」を行うと、プログラムがクラッシュすることです。デバッガーはApplication.Run( new frmMain() );、「呼び出しのターゲットによって例外がスローされました」という理由で、スタートアップの「プログラム」クラスにジャンプします。

進捗状況を報告しなければ、すべてうまくいきます。誰かが理由を知っていますか?これはスレッドと関係があると思いますが、その方法はわかりません。

4

2 に答える 2

3

いくつかの提案:

1.)例外のInnerExceptionプロパティを調べます。TargetInvocationException

2.) 例外がスローされるとすぐに停止するように Visual Studio を構成します。

ここに画像の説明を入力

これは、エラーに近づくのに役立ちます。

于 2012-08-28T08:36:05.637 に答える
1

たぶん、ReportProgressがブロックしていて、コードが// calculations ...依存する何かを準備していると思います。それがブロックしていないというわけではありません:

ReportProgressメソッドの呼び出しは非同期であり、すぐに戻ります。

http://msdn.microsoft.com/en-us/library/ka89zff4.aspx

于 2012-08-28T08:45:29.590 に答える