Pengaturcaraan berbilang benang membolehkan berbilang tugasan dilakukan secara serentak. Apabila berbilang utas berjalan serentak dengan utas UI utama, pelaksanaannya perlu disegerakkan. Salah satu cara adalah dengan menunggu urutan selesai sebelum meneruskan pelaksanaan.
Pertimbangkan coretan kod berikut:
<code class="language-csharp">public void StartTheActions() { Thread t1 = new Thread(new ThreadStart(action1)); t1.Start(); // 在启动t2之前等待t1完成。 // 创建一个用作通知机制的事件。 }</code>
Untuk menunggu urutan lain selesai, anda boleh melakukan beberapa perkara:
<code class="language-csharp">t1.Join();</code>
Kaedah ini menyekat utas semasa sehingga utas yang ditentukan menyelesaikan pelaksanaannya.
<code class="language-csharp">ManualResetEvent waitEvent = new ManualResetEvent(false); // 启动线程并传递等待事件。 Thread t1 = new Thread(() => { action1(); waitEvent.Set(); }); t1.Start(); // 等待线程完成。 waitEvent.WaitOne();</code>
<code class="language-csharp">public event EventHandler ThreadDone; // 启动线程并添加事件处理程序。 Thread t1 = new Thread(() => { action1(); ThreadDone?.Invoke(this, EventArgs.Empty); }); t1.Start(); // 通过注册事件处理程序来等待线程。 void WaitForThread() { ThreadDone += (sender, args) => { /* 执行操作 */ }; }</code>
<code class="language-csharp">public delegate void ThreadDoneHandler(); // 启动线程并传递用于通知的委托。 Thread t1 = new Thread(() => { action1(); threadDone?.Invoke(); }); t1.Start(); // 通过注册委托来等待线程。 ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ }; threadDoneHandler += delegate { threadDoneHandler = null; };</code>
<code class="language-csharp">Task<int> task = Task.Run(() => { return action1(); }); // 等待任务完成。 int result = task.Result;</code>
Kaedah yang anda pilih bergantung pada keperluan khusus aplikasi anda. Jika anda perlu menyekat utas semasa sehingga utas lain selesai, Thread.Join()
mungkin merupakan pilihan yang paling sesuai. Jika anda tidak mahu menyekat urutan, anda boleh menggunakan teknik lain seperti acara, perwakilan atau operasi tak segerak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menunggu Benang untuk Dilengkapkan dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!