C#では、Windowsフォームアプリケーションを使用して、アイトラッキングプロジェクトに取り組んでいます。アイトラッキングプロセスでは、今までのところ、アイトラッキングデータのヒートマップを作成するなど、必要なものすべてを作成しました。数秒後にスレッドを終了する方法
私のメインフォームには、目の座標をとり、データをデータベースに追加するプログラムを起動する4つのボタン "Start Stream"があります。前のプロセスを終了する「ストップストリーム」。データベースのすべてをクリアする "Clear Database"。また、ヒートマップを作成するためにデータの操作を行う「ヒートマップの作成」もあります。
今私は何かを変更したいです。スタートボタンをクリックすると、プログラムはフルスクリーン上のピクチャボックスを含む新しいフォームを開き、開いた画像をユーザが眺めます。しかし、全画面を注視しながらストリームを止めることはあまりできないので、10秒後にプロセスを停止させたいと思っています。
ストリームを開始するための私のコードは次のとおりです。
flag = true;
StreamOnPictureForm newStreamForm = new StreamOnPictureForm();
newStreamForm.Show();
//このフォームは中央でのPictureBoxを持つだけで基本的な形です。
Stream.resetEvent = new ManualResetEvent(false);
Thread thread = new Thread(Stream.GazeStream);
thread.Start();
//これは私の目の動きを読んでDBに追加する主な方法です。
フラグは、プログラムが実行されていることを理解するためのものです。
そして、私は私の「停止ストリーム」ボタンでプロセスを停止します。
if (flag == true)
{
Stream.resetEvent.Set();
}
flag = false;
今、私が欲しいもの、いずれかのボタンをクリックせずに流れを停止すること、です。私は時間を計算しようとすると、このようなコードでストリームを停止する場合:
DateTime startTime = DateTime.Now;
TimeSpan byNow;
bool isActive = true;
int x;
while (isActive == true)
{
byNow = DateTime.Now.Subtract(startTime);
x = (int)byNow.TotalSeconds;
if (x > 5) { isActive = false; }
}
Stream.resetEvent.Set();
これは、データが5秒間DBを行う追加開始しますが、私の写真は、その時間後に画面上に示され、画像が最終的に画面に表示されている間、プログラムはもはやユーザーの目からデータを取りません。これは私がしたいことではありません。
スレッドを終了するにはどうすればいいですか(何秒後にデータを追加して画像を閉じるのをやめますか?)誰かが私を助けてくれる?
「スレッドスレッド=新規スレッド」これは従来のコードです。現代版の.NETではこれを行うべきではありません。 'Task'クラスを見てください。 – user3185569