私は実行を開始する2つのスレッドを持っていますユーザーが再生ボタンを選択したとき。 しかし、「一時停止」または「再開」ボタンを選択すると、Thread.Join()が原因でUIがハングします。UIフリーズ問題を克服するThread.Join()の代替手段は何ですか
以下はコードですが、私はこれを克服するための代替手段を探しています。 私は既にInvokeで試してみましたが、この方法でもUIのUIがフリーズしてもスレッドメソッドを呼び出せません。
ThreadStart m_executeThreadStart;
Thread m_executeThread;
//user Selected Start Button
private void Start()
{
m_executeThreadStart = new ThreadStart(method1);
m_executeThread = new Thread(m_executeThreadStart);
m_executeThread.Name = "ExecuteTestSession";
m_executeThread.IsBackground = true;
m_executeThread.Start();
// Start the asynchronous operation.
// InitializeBackgroundWorker();
// backgroundWorker1.RunWorkerAsync();
//Creating result sync thread
ThreadStart m_resultSyncThreadStart = new ThreadStart(method2);
Thread m_resultSyncThread = new Thread(m_resultSyncThreadStart);
m_resultSyncThread.Name = "SyncResultDatabase";
m_resultSyncThread.Start();
}
private void method1()
{
//do some work
//read data from OPC sever (device)
}
private void method2()
{
//do some work
//updated database accordingly method 1 data
}
//user Press Pause button
public void Suspend()
{
//do work
m_executeThread.Join();
//do work
}
//user Press Resume button
public void Resume()
{
//do work
m_executeThread.Join();
//do work
}
「結合」をなぜ実行しているのかは不明です。 'Join'の前に' Suspend'/'Pause'からスレッドをシャットダウンしようとしていますか?もしそうなら、あなたが投稿したコードから*これをやっている方法の詳細を完全に削除しました。もしそうでなければ、なぜあなたはそれらのポイントをヒットしたときにスレッドが終了すると思いますか? –
@Damien_The_Unbelieverユーザーがメソッド1から読み込んだデータの量に対して一時停止をクリックすると、データベースの更新プロセスを完了しようとしています。たとえば、1000のデータがあり、50のデータを読み込んだ後、一時停止をクリックします。 。 –