ここでの答えは間違いではありませんが、while(true)
ループを実行する際の多くの問題に実際には対処していませんwhile(1==1)
。
まず、アプリケーションが使用されている間ずっとループが実行されている場合でも、ユーザーがアプリケーションを終了するときなど、ある時点でループを停止する必要があります。これは、一定のループを持つスレッドがある場合、ユーザーがUIウィンドウを閉じると、プロセスはスレッドが終了するまで(これは、しばらくの間trueループになることはありません)、またはユーザーが賢くなり、タスクマネージャーから閉じるまで続きます。
ループの外側のアクセス可能なプロパティを参照するwhile条件チェックにtrue条件を設定することで、これを解決できます。
例:
private bool RequestExit = false;
private Thread MyLoopThread;
private void MyLoop()
{
while (!RequestExit)
{
//Do stuff!
Sleep(1);
}
}
public void StartLoop()
{
RequestExit = false;
MyLoopThread = new Thread(MyLoop);
MyLoopThread.Start();
}
public void StopLoop()
{
RequestExit = true;
}
これは必要最低限のことであり、ダブルローンチやダブルシャットダウンイベントを回避することすらできません。
よりクリーンな方法は、プールする任意の間隔を10ミリ秒程度に設定することです。これは、ほとんどすべてのリアルタイムイベントで問題なく実行され、その間隔で起動するメソッドをトリガーします。
private Timer DoStuffTimer;
private void DoStuffMethod(object obj = null)
{
//Do stuff!
}
public void StartLoop()
{
DoStuffTimer = new Timer(DoStuffMethod,null,10,10);
}
public void StopLoop()
{
DoStuffTimer.Dispose();
}