2010-12-20 6 views
5

C#、VS2010を使用して、私は意味をなさない何かを持っています。C#:私のバックグラウンドワーカースレッドシグナリングは、なぜそうでないときに処理されるのですか?

起動時に、プログラムはテキストファイルから数百kを読み込む必要があります。ロードコードが正常に動作していることを確認した後、私はバックグラウンドスレッドでそれを投げました。これがIDE内から実行されている限り、すべては問題ありませんが、スタンドアロンで実行されているときには、スレッドは実行されていないときに終了すると言います。これはもちろんブームになります。

トリガコード:

BackgroundWorker Background = new BackgroundWorker(); 
Background.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DatabaseLoaded); 
Background.DoWork += new DoWorkEventHandler(delegate { Database.Load(); }); 
Background.RunWorkerAsync(); 

とブームを起こっているものはDatabaseLoaded()です。

私は、何が起こっているのかを追跡するためにメッセージボックスをいくつか入れました。Load()メソッドの最初と最後の行と最初の行はDatabaseLoaded()です。

IDEでこれは私の期待通りにトリガーします:Load() begin、Load() done、DatabaseLoaded()。ただし、スタンドアロンで実行するとLoad()が始まり、DatabaseLoaded()と処理されない例外ボックスが表示されます(ローダーは空のテーブルを作成することさえできません)。

Microsoftは何ですか?

答えて

17

RunWorkerCompletedは、エラーが発生した場合(処理されない例外の場合など)に呼び出されます(Database.Load())。 RunWorkerCompletedEventArgsErrorプロパティを確認します。

+0

これだけです。何らかの理由でGetExecutingAssembly()が発生しました。場所が異なるパスを返しましたが、すべてが見つかりませんでした。 –

4

おそらくDatabase.Load()から例外がスローされます。 BackgroundWorkerは、RunWorkerCompletedイベントをトリガする前に未処理の例外をキャッチします。 RunWorkerCompletedEventArgs.ErrorプロパティをDatabaseLoadedにチェックしてください。

+0

ここにエコーがありますか? – Gabe

+0

:-)ちょうど2つの回答がほぼ同時に掲載されています...もっとアップヴォートを得る予定の人を見るのは面白いでしょう:-D –

+0

5分後に実際に投稿されました。 – Gabe

関連する問題