1

MainForm がデータベース関連の作業を行っている間に、プログレスバーを含む新しいフォームを表示したいと考えています。UI を新しいスレッドに渡したくないということを読んだので、この問題を回避するための最善の解決策は何だろうか?

UI と MainForm への多数の呼び出しを使用するため、別のスレッドでデータベース関連の作業を行うことはできません。MainForm のスレッドはクラス内で動作しているため、私も使用できませんApplication.DoEvents()。私が知る限り、クラスの親への呼び出しを行うべきではありません。

任意の提案をいただければ幸いです!

編集

私が実際に疑問に思っていたことを明確にするために:

私のプログラムは次のようになります。

... Content = DatabaseClass.LoadContent();
ApplyContentToUI(Content);

そして、私がやりたかったのは次のことでした:

//Show a form here with a progressbar
... Content = DatabaseClass.LoadContent();
ApplyContentToUI(Content);
//Close the form here

しかし、ApplyContentToUI を実行する時間はおおよそだったので。1秒私は次のことをすることにしました:

//Show a form here with a progressbar
... Content = DatabaseClass.LoadContent();
//Close the form here
ApplyContentToUI(Content);

私とは異なり、UI のリロード中にプログレスバーを表示する必要がある場合は、以下のコメントと回答を参照することをお勧めします。

4

2 に答える 2

1

@Servy は、UI とロジックを混在させるのではなく、最初にロジックを実行してから、結果を UI に適用することを提案しました。これは元の目的を満たしていませんが、私の問題を回避する最も簡単な方法のようです。(プログレスバーを含むフォームは、ロジックを実行している間のみ表示されますが、UI を更新している間のみ表示されます。) UI の更新はおおよそで行われます。時間が短いため、プログレスバーは最終的には実際には必要ありません。

UI のロード中に引き続きプログレスバーが必要な場合は、この質問の下にいくつかの適切な回答/解決策が示されています。

于 2013-07-08T16:44:35.390 に答える