0

イベントを処理Timerする があるとしましょう。Elapsedメソッドコードが実行されるスレッドは?

タイマーが作成されたスレッドはありますか? もしそうなら、それが別のスレッドにあることを望むなら、スレッドの初期化ではなく、スレッドのメインループでタイマーが確実に作成されるようにする必要があります-正しいですか?

4

1 に答える 1

1

スレッドは、スレッドプールの 1 つです。どのスレッドが経過したメソッドに関連付けられるかを予測する方法はありません。

詳細: http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx

(そして、デザインの観点からは、それは問題ではありません)

編集:実際には、使用されるスレッドを定義する方法があります。タイマーの SynchronizingObject プロパティを使用できます。

SynchronizingObject が null の場合、Elapsed イベントを処理するメソッドがシステム スレッド プールのスレッドで呼び出されます。システム スレッド プールの詳細については、ThreadPool を参照してください。

Elapsed イベントがボタンなどの視覚的な Windows フォーム コンポーネントによって処理される場合、システム スレッド プールを介してコンポーネントにアクセスすると、例外が発生するか、機能しない可能性があります。SynchronizingObject を Windows フォーム コンポーネントに設定することで、この影響を回避します。これにより、Elapsed イベントを処理するメソッドが、コンポーネントが作成されたのと同じスレッドで呼び出されます。

参照: http://msdn.microsoft.com/en-us/library/system.timers.timer.synchronizingobject.aspx

于 2012-12-05T16:08:39.753 に答える