を再開します。一時停止し、私はスレッドを一時停止し、再開するには、このコードを持っているスレッド
public partial class frmMain : Form
{
(...)
ManualResetEvent wait_handle = new ManualResetEvent(true);
(...)
}
private void frmMain_Shown(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(TheLoop));
}
private void TheLoop(object stateinfo)
{
bool hasInfo = true;
while (doLoop)
{
wait_handle.WaitOne();
bool hasLines = GetInfo();
if (hasLines)
{
//Consuming time Operation 1
System.Threading.Thread.Sleep(7000);
if (CurrentLine < line.Count - 1)
CurrentLine++;
else
{
bool hasInfo2 = GetInfo2();
if (hasInfo2)
{
//Consuming time Operation 2
System.Threading.Thread.Sleep(7000);
}
CurrentLine = 0;
}
}
else
System.Threading.Thread.Sleep(40000); //Wait to query again
}
}
private void btnPauseResume_Click(object sender, EventArgs e)
{
if (btnPauseResume.Text == "Pause")
{
btnPauseResume.Text = "Resume";
wait_handle.Reset();
}
else
{
btnPauseResume.Text = "Pause";
wait_handle.Set();
}
}
上記のコードは、サイクル情報を示し、それは「最初に時間のかかる作業」が、doesnのを一時停止し、再開することを見つける作品第2の消費時間操作でスレッドを一時停止するためにボタンを押すと、これが継続し、最初のものが再び表示されたときに一時停止します。
私はここで何が欠けていますか? Thx
もっと詳しく知るには? – CrazyDart
編集CrazyDartのおかげで、私は複数のwait_handle.WaitOne()を読んだ。スレッドを一時停止または再開する必要があるたびに必要ですが、操作2の前にもう1つ追加しましたが、機能しませんでした。 – Somebody
Consuming time操作では、DBから読み込み、呼び出しを使用してGUIに値を設定します。それだけだから、私はそれが問題になるとは思わない。 – Somebody