3

ManualResetEvent.WaitOne() を処理するときに奇妙なランダム NPE エラーが発生します。これが私のコードです。

ManualResetEvent オブジェクトを作成するメソッドがあり、それを依存関係パラメーター (manualResetEvent) の 1 つとして Windows Workflow Foundation (WWF) ワークフロー インスタンスに渡し、manualResetEvent.WaitOne() API に入ります。

ManualResetEvent manResetEvt = new ManualResetEvent(false);

Dictionary<String, Object> wfArgs = new Dictionary<string, object>();
wfArgs["manualResetEvent"] = manResetEvt;

WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(MyWWFProcess), wfArgs);

instance.Start();
manResetEvt.WaitOne();

WWF 内でジョブが完了したら、単純に manualResetEvent.set() を呼び出します。

if (this.manualResetEvent != null)
{
    this.manualResetEvent.Set();
}

これらはすべて正常にコンパイルされ、実行中に、フローが期待どおりに WWF に入り、呼び出し元も WaitOne() 呼び出しを待機することがわかります。

WWF が manualResetEvent.Set() を呼び出して呼び出し元に通知した瞬間、呼び出し元が WWF ではない NPE 例外が表示されます。

System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

この例外がどこから発生するのか本当にわかりません。VS IDE でこのコードをデバッグすると、すべて正常に動作しますが、アプリケーションがリリース モードの場合にのみ、この例外が表示されます。

ここで何が間違っていますか?

4

2 に答える 2

0

私は自分の質問に対する答えを見つけました。James Thorpe の提案に基づいて、例外からスタック トレースを出力したところ、このメソッドを呼び出すときにアプリケーションが NULL データ ポイントを送信しており、WaitOne() が NPE を引き起こしていないことがわかりました。VS IDE デバッガーから単体テストを実行したときに、適切な値を渡したので、例外は見つかりませんでした。呼び出し元のメソッドを修正した後、すべてがうまく機能しています。この問題を解決するためのアイデアを提案してくれたすべての人に感謝します。

于 2015-04-27T16:03:59.210 に答える