Ich habe zwei Thread, die starten, wenn Benutzer Play-Taste auswählen. Wenn Sie jedoch die Schaltfläche "Pause" oder "Fortsetzen" wählen, hängt meine Benutzeroberfläche wegen Thread.Join().Was ist die Alternative von Thread.Join() zu überwinden UI Einfrieren Problem
Unten ist Code, ich suche nach einer Alternative, um dies zu überwinden. Ich habe bereits mit Invoke versucht, aber es funktioniert nicht einmal mit diesem Ansatz meine Benutzeroberfläche einfrieren den Moment ich Thread-Methoden aufrufen.
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
}
Es ist unklar, warum Sie das 'Join' überhaupt ausführen. Versucht ihr in irgendeiner Weise den Thread von 'Suspend' /' Pause' vor 'Join' zu beenden? Wenn dies der Fall ist, haben Sie die Details von * wie * Sie aus dem Code, den Sie gepostet haben, vollständig entfernt. Wenn nicht, warum erwartest du dann, dass der Thread beendet wurde, als du diese Punkte getroffen hast? –
@Damien_The_Unbeliever Ich versuche, Datenbankaktualisierung Prozess abzuschließen, wenn Benutzer auf Pause für die Menge der Daten, die von Methode 1 lesen. zum Beispiel, wenn ich 1000 Daten und nach dem Lesen von 50 Daten Benutzer klicken auf Pause Ich möchte für 50 Daten aktualisieren . –