WindowsタイマーでDELEGATEは必要か?

解決


minmin  2007-10-30 02:20:49  No: 137990

.net2005で異なるスレッド間でデータをやりとり(あるフォームに、異なるスレッドからデータを表示する等)する際DELEGATEする必要があるということを
知ったのですが、マルチスレッドに対応していないWindowsのタイマーでも
必要なのでしょうか?
例:Form1のタイマー処理の中でForm1のテキストボックスに値を表示する。


Hongliang  2007-10-30 03:03:31  No: 137991

> 異なるスレッド間でデータをやりとり(あるフォームに、異なるスレッドからデータを表示する等)する際DELEGATEする必要がある
これは違います。
あるコントロール A を作成したスレッドとは別のスレッドから A を操作しようとするときに、A.Invoke または A.BeginInvoke メソッドの呼び出しを行う必要があると言うことです。
例えばコントロールとは無関係の単なる String 変数に代入するだけなら問題ありません。でもこの String 変数が Control.Text だったら Invoke/BeginInvoke が必要です。

で、System.Windows.Forms.Timer は通常、コントロールと同一スレッドで Tick イベントを発生させるので、Invoke/BeginInvoke は不要です。


minmin  2007-10-30 05:19:35  No: 137992

回答ありがとうございます。
今回は、タイマーについてですが、他のコントロールやクラス等
使用するときに、別スレッドで動作するかどうかを判断するためには
どのように調べたらいいのでしょうか?


minmin  2007-11-07 02:20:45  No: 137993

解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加