0

スレッドを使用して、プログレスバーでメソッド DoLongWork() によって行われた作業のパーセンテージを表示する必要があります。

Public string  DoLongWork(int varName)
{
      Thread.Sleep(1000000);

       /*This method will take 1 hour to return the result (say)*/
      Return "Done";
 }

DoLongWork() メソッドはデータベースのバックアップを行います。データベースのバックアップを実行するのに時間がかかることはわかっています。プログレスバーにバックアップの割合を表示する必要があります。ありがとう

どんなタイプの提案も高く評価されます。

4

4 に答える 4

2

あなたがやりたいことについては、バックグラウンドワーカーがメソッドを実行し、進行状況バーの状態を確認する機能を提供することをお勧めします。

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

于 2013-07-11T13:25:35.633 に答える
1

あなたの質問からは明らかではありませんが、スレッドの管理方法について言及していると思いますが、おそらくWinFormsを使用していますか?

もしそうなら:

  • バックグラウンド (または非 UI) スレッドで「DoLongWork」関数を実行します。これには、ThreadPool クラスを使用する方法や、メソッドを参照して Start() を呼び出す新しい Thread オブジェクトを作成する方法など、さまざまな方法があります。

  • DoLongWork で行われている作業中に定期的に (つまり、ループのたびに 1 回でしょうか?)、進行状況の数値を UI スレッドに戻して、進行状況バー コントロールでレンダリングできるようにします。コントロールへの変更は UI スレッドで発生する必要があるため、これが必要です。これを行うための Control.Invoke および Control.BeginInvoke メソッドを見てください。

DoLongWork メソッドに戻り値があるかどうかを再検討することもできます。別のスレッドで実行されている場合、戻り値がどこに行くのかわかりません...通常のアプローチは、結果をどこかに保存して、実行されるロジックによって取得できるようにすることです仕事は終わった。終了時に UI で何かが発生すると仮定すると、これは、最後のステップとして別の Invoke/BeginInvoke 呼び出しを行う DoLongWork によって UI スレッドで呼び出される別のメソッドである可能性があります。

于 2013-07-11T13:41:58.337 に答える