- - PR -
2つのFormにそれぞれ異なるBitmap画像をそれぞれのタイマで更新表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-10-05 23:55
Jittaさん、Unibonさん、指摘ありがとうございます。
以前にもタイマがらみで質問させていただいた際にも お世話になってましたね 実は、FormBで回すタイマはForm.Timerを試してもみたんですが 同じ結果だったんです。サーバベースタイマはまだ試してなかった んで、一度Timers.Timerに置き換えてみようと思います。 それと、エラーメッセージの『オブジェクトが他で使われている』 という文言で、ちょっと思い当たる点がでてきました。 繰り返し呼び出されるdrawB関数のなかで、ちゃんと 変数の排他制御ができてないのかもれません。 いずれにせよ、明日早速確認し、結果を報告いたします。 | ||||
|
投稿日時: 2008-10-06 01:05
もし System.Windows.Forms.Timer でも改善しないのでしたら、タイマーに限らずどのようなイベントでも起きる可能性があるのではないかと思います。極端な話、たとえばボタンのクリックイベントでも起きる可能性があると思います。(細かいことを言えば、ボタンだとたとえばフォーカスが移動するなどの副作用はありますが。) 単純に描画の仕方の問題なんでしょうかね? 私だったら、描画だけのデバッグならば、タイマーを使うよりは、ボタンを押すほうがデバッグしやすいので、一時的にタイマーを使わずにボタンだけで再現してみます。 でも、もしも、ボタンでは再現しないようでしたら、やっぱり原因はタイマーにあることになると思います。ただ、System.Windows.Forms.Timer は原理的にマルチスレッド絡みの問題も起きず、非常に副作用が少ないものです。もしタイマーのときだけ再現するのでしたら、タイマーの問題というよりは、単にオブジェクトの状態管理のロジックの問題なのだろうと思います。 もし可能ならば再現するコードを提示されるのが手っ取り早いと思います。 | ||||
|
投稿日時: 2008-10-06 19:32
ご指摘いただきましたjittaさん、Unibonさん、
ありがとうございました。解決いたしました。 結局FormBでまわすタイマをForm.Timerに置き換え、かつ オブジェクトの排他制御を見直すことで解決いたしました。 ※本筋とは関係のない、ステータスチェック部分で、FormA上の フラグを確認しており、ここの排他制御のし忘れを 見落としていました。 申し訳ありません、結局当方のポカミスでした。 お騒がせをいたしました。 | ||||
|
投稿日時: 2008-10-06 22:41
「ユーザー インターフェイス スレッド」を意識していないことが、原因だと思います。 |