2017-06-10 18 views
-3

処理を行う機能があります。関数の始めに、状態を示すラベルのテキストを変更し、プロセスが終了したら再度変更します。処理中にラベルの内容を変更します

実際には、最終変更のみが表示されます。

私はプロセスのスレッドを作ることができますが、この場合は必要ではないことを知っています。スレッドの使用を中止するためのヒントやヒントがあるかどうかを知りたいだけです。

+0

どのコードも参考になります私はあなたがウェブやデスクトップやWindowsのアプリケーションについて取り組んでいるのではないかと確信していません –

+0

このラベルは2回だけ変更する必要がありますか?最初は1つ、最後は1つですか?処理関数の直前の呼び出しメソッドで変更してください。 –

+1

async/await、BackgroundWorkerなどの「スレッド」を含まないオプションがいくつかありますが、どちらか一方の方法で取得する必要があります。 UIスレッドを処理してUIをブロックしないようにします。 –

答えて

-1

この場合UIで何かを変更すると、ラベルの最終的な状態しか見ることができないので、プロセス全体が完了するまで変更されません。トリックは簡単です。最初の時間のラベルを更新するときに、セカンダリスレッドを使用する必要があります。 以下の例を見てください:

class Program 
    { 
     private delegate void del(); 
     static void Main(string[] args) 
     { 
      del d = updateConsole; 
      var res = d.BeginInvoke(null, null); 
      while (!res.IsCompleted) 
      { 
       // do the job here 
      } 
      d.EndInvoke(res); 
      Thread.Sleep(1000); 
      Console.Clear(); 
      Console.WriteLine("Done!"); 
      Console.Read(); 
     } 

     private static void updateConsole() 
     { 
      for (var i = 0; i <= 10; i++) 
      { 
       Thread.Sleep(500); 
       Console.Clear(); 
       Console.WriteLine(i); 
      } 

     } 
    } 

この簡単なテクニックは、あなたが全体のプロセスからのラベルの最初の更新を分離するのに役立ちます。

関連する問題