3

C# のイベントについて質問があります。プログラムが動作しているときに何が起こるか (たとえば、ループが実行され、終了するのに数分かかる)、イベントが発生します (たとえば、FileSystemWatcher が "created" イベントを呼び出します)。

イベントは無視されますか? FSW はイベントを呼び出さないので、新しいファイルの作成は無視されますか? イベント発生時に実行する必要があるコードは、ループ終了後に実行されますか?

もちろん、ループはこのイベントとは関係がなく、バックグラウンド ワーカーなどは使用されません。

4

1 に答える 1

4

これは実装に大きく依存します。の場合、システムによって作成されFileSystemWatcherたワーカー スレッドでそのイベントが発生することが予想されるため、ループと同時に発生します。それがUIイベントである場合、メッセージループのキューに追加され、現在UIスレッドをブロックしている作業の後に処理されることが期待されます(これは行うべきではありません)。それが意図的な設計機能でない限り、イベントがどこにも消えてしまうのは珍しいことです。

通常のコードによって引き起こされる他の多くのイベントの場合、それらは通常、発生時に同期的に処理されます。

したがって、3 つのオプションがあります。

  • 原因スレッドによって同期的に処理される
  • ワーカー スレッドで呼び出される
  • UI スレッドのキューに追加されます (通常は「sync-context」を介して)

この場合、答えは「ワーカースレッドで呼び出される」と思いますが、より一般的なイベントでは3つすべてが可能です

于 2013-06-23T22:52:55.297 に答える