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

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

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

Re[2]: 子フォームから親フォームへの非同期処理の方法


(過去ログ 112 を表示中)

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

■66379 / inTopicNo.1)  子フォームから親フォームへの非同期処理の方法
  
□投稿者/ マシュー (1回)-(2013/04/18(Thu) 21:52:58)

分類:[VB.NET/VB2005 以降] 

親フォームに複数のPictureBoxがあり、子フォームより制御を行っています。
今、子フォームにDataGridViewがあり、このDataGridViewの選択行に応じて、親フォームのPictureBoxに表示する画像を
修正したものを表示しています。

ただ、親フォームのPictureBoxの数が少ない場合はいいのですが、このPictureBoxの数が多くなると、
どうしても画像処理のトータル時間が多くなり、DataGridViewの選択動作が鈍くなります。
(具体的には、DataGridViewのセル選択箇所の反転表示の反応が遅くなってしまうということです。)

このため、子フォームのDataGridViewの行選択と親フォームのPictureBoxの画像処理を非同期で行いたいのですが、
どのような方法があるでしょうか?
可能であれば、子フォームのDataGridViewの行選択が行われた時、すでに親フォームの画像処理が実行中の場合には
この画像処理を一時中断し、最新の子フォームのDataGridViewの選択内容で親フォームの画像処理を再開できればいいのですが、
このようなことは可能でしょうか?
引用返信 編集キー/
■66381 / inTopicNo.2)  Re[1]: 子フォームから親フォームへの非同期処理の方法
□投稿者/ Azulean (137回)-(2013/04/18(Thu) 22:58:18)
No66379 (マシュー さん) に返信
> このため、子フォームのDataGridViewの行選択と親フォームのPictureBoxの画像処理を非同期で行いたいのですが、
> どのような方法があるでしょうか?
> 可能であれば、子フォームのDataGridViewの行選択が行われた時、すでに親フォームの画像処理が実行中の場合には
> この画像処理を一時中断し、最新の子フォームのDataGridViewの選択内容で親フォームの画像処理を再開できればいいのですが、
> このようなことは可能でしょうか?

できるともできないとも言えます。
それは、あなたが「画像処理」と呼んでいる処理がどのようなものかわからないためです。

具体的なことがわからないので、おおざっぱに書いてしまいますが、画面に表示する処理であれば、できないと言えるかもしれません。
フィルター・回転・トリミングなどの画像処理であれば、その部分をスレッドにしてしまえば非同期にはできますが、難易度は上がります。
できあがったら反映するだけでなく、キャンセルもあるわけですから、排他する・同期をとるのにスレッドの動きや隙をきちんと考えて練り上げる必要があります。

まずは非同期処理について学んでみてください。
古くからあるスレッド(Thread, BackgroundWorker)、最近の Task など、アプローチはいくらでもありますが、きちんと理解していないとたまに例外が発生する、動きがおかしいという不具合を埋め込むことにつながります。
引用返信 編集キー/
■66385 / inTopicNo.3)  Re[2]: 子フォームから親フォームへの非同期処理の方法
□投稿者/ マシュー (2回)-(2013/04/19(Fri) 06:00:01)
Azuleanさま、ご回答ありがとうございます。
BackgroundWorkerを色々と調べ、PictureBoxに設定するImageをBackgroundWorkerのDoWork内で作成することにより、
やりたいことができそうです。

これから午後の講義までしばらく寝て、今夜またトライしてみます。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -