■66841 / ) |
Re[4]: フォームで処理中に「処理中・・・」画面を表示したい。 |
□投稿者/ taka (3回)-(2013/05/30(Thu) 15:33:06)
|
魔界の仮面弁士 さん ありがとうございます。
> ただし、依頼者(画面)と作業者(ワーカースレッド)が独立しているということは、 > 同じオブジェクトを両者で共有することは、基本 NG であることに注意が必要です。 > > ・DoWork 内から、フォームやコントロールを操作することはできません。 > ・Form や Module のフィールド変数(Private/Public aaa As Integer など)を使うことも NG です。 > ・ローカル変数は利用できます。DoWork 内で Dim 変数を使うことは問題ありません。
BackgroundWorkerを使用してみたのですが【処理】の中の Aデータベースからのデータ表示処理(重い処理ではないですが・・・) で画面コントロールへアクセスする部分で問題にぶち当たりました。 Invokeを使用すればいいのかもしれませんが、処理自体はコーディング済みなため変更は厳しいです・・・
その他いろいろなパタンをためしました。 1.ただ単純にSubFormを表示 (問題)SubFormの再描画が行われずに期待通りの動きをしない。
2.SubForm自体を別スレッドで呼び出し表示させる。 (問題)SubForm表示中にメッセージボックスが出るとメッセージがSubFormで隠れてしまう。 -------また表示させたメッセージボックスで「はい」や「OK」をクリックするとSubFormがMainFormの裏に隠れる。 (問題)別スレッドで動かしているためMainFormをオーナーにできない。
3.SubForm自体は同スレッドで呼び出すが、内部の描画処理を別スレッドに持っていってみる。 (問題)SubFormの再描画が行われずに期待通りの動きをしない。
4.処理をBackgroundWorkerに任せて同スレッドでSubFormを表示 (問題)データ表示処理でMainFormのコントロールへアクセスできない。(Invokeの処理追加は困難)
5.SubFormを別ExeにしてStartProcessで呼び出し(まだ試していません。) (予想)2と同じ問題が発生しそう・・・予想ですみません。
========================================================= この発想は画面で処理中の場合に、「フリーズしているわけではなくて処理中なんですよ!」ってアピールしたいとこから始まりました。 Gifアニメなんか見てもらいながらリラックスしてもらおうとかいろいろ考えていった結果煮詰まっております… 重要な機能ではないため、 『そもそも考え方間違ってる!』 『そんなことできるわけない!』 『そんなことしなくても、○○があるよね?』 などの意見があれば、やめるつもりです(><)
なんとか実装したいのですが、難しいものでしょうか?
|
|