2017-09-28 11 views
0

多くのタスクから同時にアクセスする方法があります。私はこのような進捗状況を報告しています:コンソールのカーソル位置をスレッドセーフな方法で設定する

Console.WriteLine("Processed: " + Interlocked.Increment(ref progress).ToString()); 
Console.SetCursorPosition(0, Console.CursorTop - 1); 

を私はそれが私が画面上で素敵な出力を持つことができますので、それが最後の番号を上書き報告次回コンソールのカーソル位置をリセットします。

スレッドが新しい位置を間違って読み取ってしまい、余分な行をジャンプして、コンソールの他の出力情報を駄目にするような問題が発生します。

私はコンソールをロックするために何をロックする必要があるのか​​よくわからないので、読んでいる時間からアップデートの時間までそれを再度読み込むことはできませんし、出力を駄目にします(実際に問題があれば、 )。

私はそれが出力されている行を完全に制御できるようにしたいので、複数のスレッドがその位置を乱してしまうのを防ぐ方法を考え出す必要があります。

答えて

5

何かをロックすることができます。あなたが使用できると思っているオブジェクトが他にない場合は、オブジェクトを作成してロックしてください。

var lck = new object(); 

void method() 
{ 
    lock(lck) 
    { 
     Console.WriteLine... 
     Console.SetCursorPosition... 
    } 
} 
+0

ありがとうございます!私は様々な関数で参照する 'consoleAccessObject'を作成しました。私はtimelimitが許可するときに6分で答えをマークする – Guerrilla

関連する問題