- PR -

2つのFormにそれぞれ異なるBitmap画像をそれぞれのタイマで更新表示

投稿者投稿内容
おいたん
会議室デビュー日: 2008/03/10
投稿数: 15
投稿日時: 2008-10-05 23:55
Jittaさん、Unibonさん、指摘ありがとうございます。

以前にもタイマがらみで質問させていただいた際にも
お世話になってましたね

実は、FormBで回すタイマはForm.Timerを試してもみたんですが
同じ結果だったんです。サーバベースタイマはまだ試してなかった
んで、一度Timers.Timerに置き換えてみようと思います。

それと、エラーメッセージの『オブジェクトが他で使われている』
という文言で、ちょっと思い当たる点がでてきました。
繰り返し呼び出されるdrawB関数のなかで、ちゃんと
変数の排他制御ができてないのかもれません。

いずれにせよ、明日早速確認し、結果を報告いたします。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-10-06 01:05
引用:

おいたんさんの書き込み (2008-10-05 23:55) より:
実は、FormBで回すタイマはForm.Timerを試してもみたんですが
同じ結果だったんです。サーバベースタイマはまだ試してなかった
んで、一度Timers.Timerに置き換えてみようと思います。


もし System.Windows.Forms.Timer でも改善しないのでしたら、タイマーに限らずどのようなイベントでも起きる可能性があるのではないかと思います。極端な話、たとえばボタンのクリックイベントでも起きる可能性があると思います。(細かいことを言えば、ボタンだとたとえばフォーカスが移動するなどの副作用はありますが。)

単純に描画の仕方の問題なんでしょうかね?

私だったら、描画だけのデバッグならば、タイマーを使うよりは、ボタンを押すほうがデバッグしやすいので、一時的にタイマーを使わずにボタンだけで再現してみます。

でも、もしも、ボタンでは再現しないようでしたら、やっぱり原因はタイマーにあることになると思います。ただ、System.Windows.Forms.Timer は原理的にマルチスレッド絡みの問題も起きず、非常に副作用が少ないものです。もしタイマーのときだけ再現するのでしたら、タイマーの問題というよりは、単にオブジェクトの状態管理のロジックの問題なのだろうと思います。

もし可能ならば再現するコードを提示されるのが手っ取り早いと思います。
おいたん
会議室デビュー日: 2008/03/10
投稿数: 15
投稿日時: 2008-10-06 19:32
ご指摘いただきましたjittaさん、Unibonさん、
ありがとうございました。解決いたしました。

結局FormBでまわすタイマをForm.Timerに置き換え、かつ
オブジェクトの排他制御を見直すことで解決いたしました。

※本筋とは関係のない、ステータスチェック部分で、FormA上の
 フラグを確認しており、ここの排他制御のし忘れを
 見落としていました。

申し訳ありません、結局当方のポカミスでした。
お騒がせをいたしました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-06 22:41
引用:

おいたんさんの書き込み (2008-10-06 19:32) より:
ご指摘いただきましたjittaさん、Unibonさん、
ありがとうございました。解決いたしました。

結局FormBでまわすタイマをForm.Timerに置き換え、かつ
オブジェクトの排他制御を見直すことで解決いたしました。

※本筋とは関係のない、ステータスチェック部分で、FormA上の
 フラグを確認しており、ここの排他制御のし忘れを
 見落としていました。

申し訳ありません、結局当方のポカミスでした。
お騒がせをいたしました。



「ユーザー インターフェイス スレッド」を意識していないことが、原因だと思います。

スキルアップ/キャリアアップ(JOB@IT)