Detaillierte Einführung in den Beispielcode von Winform in c# zur Implementierung einer asynchronen Multithread-Aktualisierung der Benutzeroberfläche

黄舟
Freigeben: 2017-03-21 11:18:42
Original
1814 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die asynchrone Multithread-Update-Benutzeroberfläche (Fortschritts- und Statusinformationen) von Winform in c# vorgestellt. Der Herausgeber findet sie recht gut, daher werde ich sie jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf.

Einführung

Bei der Entwicklung von Winform-Programmen, die eine große Menge an Datenlese- und -schreibvorgängen erfordern, ist oft eine gewisse Zeit erforderlich Während dieser Zeit kann die Benutzeroberfläche der Benutzeroberfläche jedoch nicht aktualisiert werden, was dazu führt, dass sich die Benutzeroberfläche in den Augen des Benutzers in einem Zustand der angehaltenen Animation befindet, was zu einer schlechten Benutzererfahrung führt. Daher muss in Anwendungen, die große Datenmengen verarbeiten, Multithreading verwendet werden, um diese Situation zu bewältigen. Es ist sehr praktisch, Multithreading in C# zu verwenden. Sie müssen nur die Startmethode einer Instanz von System.Threading.Thread verwenden, aber die Interaktion zwischen Multithreads ist nicht so einfach. Dieser Artikel implementiert die Verwendung von Unterthreads zur Datenverarbeitung und aktualisiert den UI-Status des Hauptthreads in Echtzeit. Beginnen wir Schritt für Schritt mit der Implementierung des Demoprogramms der asynchronen Thread-Update-Benutzeroberfläche.

Anwendungshintergrund

Schreiben Sie eine bestimmte Datenmenge in eine Textdatei, und der Echtzeitfortschritt beim Schreiben der Daten muss in der Hauptschnittstelle widergespiegelt werden. Voraussetzung: Die geschriebenen Daten müssen in einer Klasse gekapselt werden.

Implementierungsprozess

1. Erstellen Sie zunächst ein Winform-Projekt, ziehen Sie eine Schaltfläche, einen Fortschrittsbalken und eine Beschriftung auf das Hauptformular. Wie unten gezeigt.

2. Schreiben Sie eine Klasse (WriteDate) zur Verarbeitung von Daten. Der Quellcode lautet wie folgt.

 public class DataWrite
 {
  public delegate void UpdateUI(int step);//声明一个更新主线程的委托
  public UpdateUI UpdateUIDelegate;

  public delegate void AccomplishTask();//声明一个在完成任务时通知主线程的委托
  public AccomplishTask TaskCallBack;
  
  public void Write(object lineCount)
  {
   StreamWriter writeIO = new StreamWriter("text.txt", false, Encoding.GetEncoding("gb2312"));
   string head = "编号,省,市";
   writeIO.Write(head);
   for (int i = 0; i < (int)lineCount; i++)
   {
    writeIO.WriteLine(i.ToString() + ",湖南,衡阳");
    //写入一条数据,调用更新主线程ui状态的委托
    UpdateUIDelegate(1);
   }
   //任务完成时通知主线程作出相应的处理
   TaskCallBack();
   writeIO.Close();
  }
 }
Nach dem Login kopieren

3. Der Code in der Hauptschnittstelle lautet wie folgt:

Zuerst muss ein Delegat eingerichtet werden, um die Thread-Aktualisierungssteuerung des nicht erstellten Steuerelements zu implementieren.

delegate void AsynUpdateUI(int step);
Nach dem Login kopieren

Schreiben Sie dann mehrere Threads, um die Methode zum Schreiben von Daten und die Rückruffunktion zu starten.

  private void btnWrite_Click(object sender, EventArgs e)
  {
   int taskCount = 10000; //任务量为10000
   this.pgbWrite.Maximum = taskCount;
   this.pgbWrite.Value = 0;

   DataWrite dataWrite = new DataWrite();//实例化一个写入数据的类
   dataWrite.UpdateUIDelegate += UpdataUIStatus;//绑定更新任务状态的委托
   dataWrite.TaskCallBack += Accomplish;//绑定完成任务要调用的委托

   Thread thread = new Thread(new ParameterizedThreadStart(dataWrite.Write));
   thread.IsBackground = true;
   thread.Start(taskCount);
  }

  //更新UI
  private void UpdataUIStatus(int step)
  {
   if (InvokeRequired)
   {
    this.Invoke(new AsynUpdateUI(delegate(int s)
    {
     this.pgbWrite.Value += s;
     this.lblWriteStatus.Text = this.pgbWrite.Value.ToString() + "/" + this.pgbWrite.Maximum.ToString();
    }), step);
   }
   else
   {
    this.pgbWrite.Value += step;
    this.lblWriteStatus.Text = this.pgbWrite.Value.ToString() + "/" + this.pgbWrite.Maximum.ToString();
   }
  }

  //完成任务时需要调用
  private void Accomplish()
  {
   //还可以进行其他的一些完任务完成之后的逻辑处理
   MessageBox.Show("任务完成");
  }
Nach dem Login kopieren

Der Effekt ist wie folgt:

Zusammenfassung

Umsetzen Asynchrone Update-UI Es gibt viele Methoden, aber ich denke, diese Methode ist flexibler und kann den Status der Aufgabe in Echtzeit abrufen und entsprechend verarbeiten. Dieser Modus eignet sich auch für die Verwendung mehrerer Threads, um gleichzeitig unterschiedliche Daten in unterschiedliche Dateien zu schreiben.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Beispielcode von Winform in c# zur Implementierung einer asynchronen Multithread-Aktualisierung der Benutzeroberfläche. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!