C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: form1_paintの処理を一時停止する方法ありますか?


(過去ログ 90 を表示中)

[トピック内 22 記事 (1 - 20 表示)]  << 0 | 1 >>

■53507 / inTopicNo.1)  form1_paintの処理を一時停止する方法ありますか?
  
□投稿者/ 裕猫 (171回)-(2010/09/16(Thu) 11:18:04)

分類:[C#] 

いつもお世話になっています。
環境 WindowsXP VisualStudio2008 C#にて開発しています。
今度VisualStudio2010 C#も追加しました。

 form1_paintの処理は常にイベントが発生するかどうかを監視しているわけですよね。これを一時停止させる方法はあるでしょうか?
たとえば、コントロールの表示を切り替える間、form1_paintの動作を停止して切り替え完了後にまた動作をさせたいのですが
開発環境は2008と2010のC#が使えます。2008ではだめでも2010なら使えるという手でも対応できます。何か方法ご存知の方教えていただきたいです。
C# form1_paint 処理 一時停止 などのキーワードで探していますが、回答にたどり着きません。よろしくお願いいたします。
引用返信 編集キー/
■53520 / inTopicNo.2)  Re[1]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 魔界の仮面弁士 (1822回)-(2010/09/16(Thu) 16:47:24)
No53507 (裕猫 さん) に返信
>  form1_paintの処理は常にイベントが発生するかどうかを監視しているわけですよね。これを一時停止させる方法はあるでしょうか?
Paint イベントを += すれば監視状態になり、
Paint イベントを -= すれば解除されますが…そういう意味では無い?
引用返信 編集キー/
■53529 / inTopicNo.3)  Re[2]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ Azulean (610回)-(2010/09/16(Thu) 23:48:41)
止めてどうしたいのかがよくわかりません。

やり方によっては、一時的に止められたとしても、次に画面に絵が出なくなるかもしれませんので、今何に困っていて、何をやりたいのかを明確にしてもらえないと、それに沿った適切なアドバイスをもらえません。
引用返信 編集キー/
■53531 / inTopicNo.4)  Re[3]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ επιστημη (2559回)-(2010/09/17(Fri) 04:58:42)
επιστημη さんの Web サイト
> 止めてどうしたいのかがよくわかりません。

同意。

ともあれ安直に

void form1_paint(...) {
  if ( 描ける状態にある ) {
    描く
  }
}

で済ませられるかもですよ?

引用返信 編集キー/
■53533 / inTopicNo.5)  Re[4]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (172回)-(2010/09/17(Fri) 08:49:49)
返信ありがとうございます。
 説明不足ですみません。 以前コントロールの表示が遅くなるので一気に表示する方法はないかお聞きしていろいろ教えていただいたのですが、その原因がコントロールの表示方法ではなくpaintイベントの動作であることがわかりました。コントロール一つを表示する度に一回paintイベントが動作するため、2つ以上のコントロールを表示するとき、次のコントロールを表示するまでに画像の再描画の時間停止がかかるので、ダブルバッファリングしているのでCGにちらつきは出ないが、コントロールの表示が遅くなるというわけです。
 以前作成したとき画像サイズが640*480ドットだったのでさほど気づきませんでした。が、今回800*600に画面を拡大してCG描画の負荷が増えたので顕著に出てきたようです。
 で対策としてはコントロールを付け替える間ペイントの動作を停止できればいいわけで ペイント動作の停止→コントロールの付け替え→ペイント動作の開始
どいう動作をできればいいのではないかと考えて調べたのですが、出てこないのでお聞きした次第です。
 よろしくお願いいたします。
引用返信 編集キー/
■53535 / inTopicNo.6)  Re[5]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ おのでら (17回)-(2010/09/17(Fri) 12:20:46)
おのでら さんの Web サイト
裕猫さんこんにちはおのでらです。

コントロールの付け替えなのでレイアウト変更イベントを止めるのも一案でしょうか。


// レイアウト ロジックの一時停止
[コントロール追加先のコントロール].SuspendLayout();

// コントロール付け替え処理 //

// レイアウト要求実行
[コントロール追加先のコントロール].ResumeLayout();


まあ改善されるかどうかは配置するものや描画内容にもよりますが
引用返信 編集キー/
■53536 / inTopicNo.7)  Re[6]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (173回)-(2010/09/17(Fri) 13:05:05)
No53535 (おのでら さん) に返信
> 裕猫さんこんにちはおのでらです。
>
> コントロールの付け替えなのでレイアウト変更イベントを止めるのも一案でしょうか。
>
>
> // レイアウト ロジックの一時停止
> [コントロール追加先のコントロール].SuspendLayout();
>
> // コントロール付け替え処理 //
>
> // レイアウト要求実行
> [コントロール追加先のコントロール].ResumeLayout();
>
>
> まあ改善されるかどうかは配置するものや描画内容にもよりますが
引用返信 編集キー/
■53537 / inTopicNo.8)  Re[7]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (174回)-(2010/09/17(Fri) 13:09:39)
No53535 (おのでら さん) に返信
すみません。ボタン押し間違えました。
 アドバイスありがとうございます。
[コントロール追加先のコントロール].SuspendLayout();
// コントロール付け替え処理 //
// レイアウト要求実行
[コントロール追加先のコントロール].ResumeLayout();
やってみましたが、症状は変わりませんでした。ボタンが表示されてくる段階でペイントイベントが反応しているようです。
引用返信 編集キー/
■53538 / inTopicNo.9)  Re[8]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ ななしー (1回)-(2010/09/17(Fri) 13:19:09)
LockWindowUpdate API使ってみたらどうでしょう
引用返信 編集キー/
■53539 / inTopicNo.10)  Re[9]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (175回)-(2010/09/17(Fri) 15:40:15)
No53538 (ななしー さん) に返信
> LockWindowUpdate API使ってみたらどうでしょう           
アドバイスありがとうございました。テストしましたがだめでした。_(_ _)_
引用返信 編集キー/
■53549 / inTopicNo.11)  Re[10]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ shu (47回)-(2010/09/17(Fri) 22:02:12)
魔界の仮面弁士さんの提示された方法は試しましたか?
イベント追加、削除の基本ですが。

クラス内のprivate変数でイベントOn,Offを表現してpaintイベントを抑止する前でフラグをOff, 処理が終わったらOn
paintイベント内でOnのときしか処理しないというのはどうでしょう=> επιστημηさんの処理の具体例です。
引用返信 編集キー/
■53551 / inTopicNo.12)  Re[11]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ Azulean (611回)-(2010/09/18(Sat) 00:00:51)
コントロールが描画されきってから、自分の Paint イベントを動かしたいとのことでしょうか?
そもそも、コントロールが描画されきったというのは何でわかるんでしょうか。(ぱっと思いつかない)

「止めることを考える」のは良いのですが、「再開することを考える」ことを忘れないでください。
引用返信 編集キー/
■53555 / inTopicNo.13)  Re[12]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ やじゅ (1729回)-(2010/09/18(Sat) 01:11:49)
やじゅ さんの Web サイト
今回の問題は、裕猫さんが6月に質問した過去ログの内容と関連している件でしょうか?
コントロールの表示速度について
http://bbs.wankuma.com/index.cgi?mode=al2&namber=50879&page=20&KLOG=85

引用返信 編集キー/
■53591 / inTopicNo.14)  Re[11]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (176回)-(2010/09/20(Mon) 08:16:36)
No53549 (shu さん) に返信
> 魔界の仮面弁士さんの提示された方法は試しましたか?
> イベント追加、削除の基本ですが。
>
> クラス内のprivate変数でイベントOn,Offを表現してpaintイベントを抑止する前でフラグをOff, 処理が終わったらOn
> paintイベント内でOnのときしか処理しないというのはどうでしょう=> επιστημηさんの処理の具体例です。
すみません。まだ試してないです。 どう書いたらよいのかわからないのでいま調べています。
引用返信 編集キー/
■53592 / inTopicNo.15)  Re[12]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (177回)-(2010/09/20(Mon) 08:20:46)
No53551 (Azulean さん) に返信
> コントロールが描画されきってから、自分の Paint イベントを動かしたいとのことでしょうか?
はいそうです。
> そもそも、コントロールが描画されきったというのは何でわかるんでしょうか。(ぱっと思いつかない)
私もわかりませんが、コントロールの表示だけならさして時間かかりませんので、タイマーでちょっと時間を入れればよいと考えています。
引用返信 編集キー/
■53593 / inTopicNo.16)  Re[13]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (178回)-(2010/09/20(Mon) 08:26:12)
No53555 (やじゅ さん) に返信
> 今回の問題は、裕猫さんが6月に質問した過去ログの内容と関連している件でしょうか?
> コントロールの表示速度について
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=50879&page=20&KLOG=85
はい関係しています。あのときのご指導にて原因がコントロール操作ではなくpaintイベントであるということがわかりましたのでそれに対する対策を考えていろいろ試していたのですが、うまくいかず、今回の方法を思いついていきずまり質問しました。
引用返信 編集キー/
■53594 / inTopicNo.17)  Re[12]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ やじゅ (1734回)-(2010/09/20(Mon) 08:50:01)
以前作成したとき画像サイズが640*480ドットだったのでさほど気づきませんでした。が、今回800*600に画面を拡大してCG描画の負荷が増えたので顕著に出てきたようです。>>はぁ?
ワロスワロス!!
その程度で負荷が増えるかよ!!
ばかじゃねぇの?
コードが間違いだらけなんだろうね。
初心者にありがちだ。ハハハ。
解決済み
引用返信 編集キー/
■53602 / inTopicNo.18)  Re[13]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ やじゅ(本物) (1回)-(2010/09/20(Mon) 12:06:59)
2010/09/20(Mon) 22:11:56 編集(投稿者)
2010/09/20(Mon) 12:08:55 編集(投稿者)

上記発言は私では無いので削除お願いします。

あと、「セッションタイムアウトについて」の「魔界」さんの
回答も削除し忘れてますよ。


追記:
あれ、ジャングル大帝っぽい人が、私のなりすましで書いた
コメントは残してしまう方向ですか?
このくらい書いとけば、残してもいいけど。

引用返信 編集キー/
■53603 / inTopicNo.19)  Re[11]: form1_paintの処理を一時停止する方法ありますか?
□投稿者/ 裕猫 (179回)-(2010/09/20(Mon) 13:14:16)
No53549 (shu さん) に返信
> クラス内のprivate変数でイベントOn,Offを表現してpaintイベントを抑止する前でフラグをOff, 処理が終わったらOn
> paintイベント内でOnのときしか処理しないというのはどうでしょう=> επιστημηさんの処理の具体例です。
この方法試してみました。FG1を用意し、paintイベント内にif(FG1==1){実行指令}でやってみました。コントロール表示終了に3秒かかると
みてタイマーで3秒停止を入れ、その後FG1をたてて描画指令したのですがフォームの表示が遅れてしまい、結果は同じでした。根本的に
考え方が違っているようなので別の方法を探すことにします。いろいろありがとうございました。
解決済み
引用返信 編集キー/
■53612 / inTopicNo.20)  Re[6]: form1_paintの処理を一時停止する方法ありますか?
 
□投稿者/ じゃんぬねっと (11回)-(2010/09/20(Mon) 21:30:31)
No53535 (おのでら さん) に返信
> コントロールの付け替えなのでレイアウト変更イベントを止めるのも一案でしょうか。
>
> // レイアウト ロジックの一時停止
> [コントロール追加先のコントロール].SuspendLayout();
>
> // コントロール付け替え処理 //
>
> // レイアウト要求実行
> [コントロール追加先のコントロール].ResumeLayout();

いまさらの突っ込みで申し訳ないのですが、
レイアウト ロジックの停止と描画イベントは関係ないですよ。
レイアウト ロジックというのは、Layout、SizeChanged、LocationChanged、とか Dock~ イベントなどを指します。
そこに Paint などの描画関係のイベントは含まれません。

あと、ジャングル大帝っぽい人の煽り書き込みは間違いなので注意してk... いや、誰も真に受けてないですよね。
掛け算ができる程度の頭の方ならお分かりになると思いますが、640x480 から 800x600 の変化は描画ロジックとしてはそこそこ影響大きいです。
単純に考えてみれば 1.5 倍の負荷ですが、描画の負荷は単純に比例して重くなるわけではありません。
解決済み
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -