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

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

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

Re[1]: 重い処理を行っている間にメッセージのフォームを表示したい


(過去ログ 58 を表示中)

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

■33505 / inTopicNo.1)  重い処理を行っている間にメッセージのフォームを表示したい
  
□投稿者/ すもももももも (1回)-(2009/03/02(Mon) 23:05:25)

分類:[.NET 全般] 

こんにちは。VB2008で簡易的なツールを作成しています。
さて、重い処理を行う時に、「ただいま処理を行っています」というようなメッセージが書いてあるフォームを
表示させたいのですが、画面の表示がうまくいきません。
例えば、以下のように処理を行っています。
(ここではこのメッセージ用フォームをFormTestとします。)

'処理前にメッセージ用フォームを表示
FormTest.Show()
FormTest.Refresh() 'メッセージ用フォーム上のラベル(メッセージが書いてある)を表示させるためにRefreshする。

'ここで重い処理を実行(内容は省略)
  ・
  ・
  ・

'処理の完了
FormTest.Close()

最初はこのメッセージ用フォームが正しく表示されるのですが、重い処理を行っている最中、表示されているこの
メッセージ用フォームをクリックしたり移動させようとしたりすると、以下のような現象が発生します。
・メッセージ用フォームの表示がおかしくなってしまいます。
 このメッセージ用フォームのControlBoxプロパティはFalseにしているため、最初は長方形のフォームが表示されるのですが、
 丸角のControlBox部分(ヘッダ部分・ちなみにこの時に確認したOSはVistaです)が表示されたりして、ラベルの内容が
 フォームの下に追いやられます。
・タスクバーにこのメッセージ用フォームの情報が表示されてしまいます。
 このメッセージ用フォームのShowInTaskBarプロパティはFalseにしているため、最初はタスクバーにフォームの情報は
 表示されないのですが、上記のようにこのメッセージ用フォームの表示がおかしくなると、タスクバーにこのフォームの情報が
 表示されてしまいます。


何か対策はあるでしょうか?
ご存知の方、よろしくお願いいたします。
引用返信 編集キー/
■33509 / inTopicNo.2)  Re[1]: 重い処理を行っている間にメッセージのフォームを表示したい
□投稿者/ Azulean (311回)-(2009/03/02(Mon) 23:32:54)
メインスレッドで長く時間のかかる処理を行うと、画面の更新等の処理を行うことができなくなるので、現状の方針では困難です。
重い処理をさせつつ、画面に何か表示を行うという場合は基本的にマルチスレッドで処理を分けます。

BackgroundWorkerクラスやThreadクラスを使うことになると思います。
DoEventsメソッドでも見た目上は効果が得られるかもしれませんが、意図せぬ動作を招く可能性があるので避けた方が無難です。

参考
http://dobon.net/vb/dotnet/programing/displayprogress.html
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -