Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menunggu Benang untuk Dilengkapkan dalam .NET?

Bagaimanakah Saya Boleh Menunggu Benang untuk Dilengkapkan dalam .NET?

Linda Hamilton
Lepaskan: 2025-01-21 19:42:27
asal
156 orang telah melayarinya

How Can I Wait for a Thread to Complete in .NET?

Beberapa cara untuk menunggu thread siap dalam .NET

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>
Salin selepas log masuk

Untuk menunggu urutan lain selesai, anda boleh melakukan beberapa perkara:

1. Kaedah Thread.Join

<code class="language-csharp">t1.Join();</code>
Salin selepas log masuk

Kaedah ini menyekat utas semasa sehingga utas yang ditentukan menyelesaikan pelaksanaannya.

2. Gunakan WaitHandle

<code class="language-csharp">ManualResetEvent waitEvent = new ManualResetEvent(false);

// 启动线程并传递等待事件。
Thread t1 = new Thread(() =>
{
  action1();
  waitEvent.Set();
});
t1.Start();

// 等待线程完成。
waitEvent.WaitOne();</code>
Salin selepas log masuk

3. Peristiwa pencetus

<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>
Salin selepas log masuk

4. Gunakan delegasi

<code class="language-csharp">public delegate void ThreadDoneHandler();

// 启动线程并传递用于通知的委托。
Thread t1 = new Thread(() =>
{
  action1();
  threadDone?.Invoke();
});
t1.Start();

// 通过注册委托来等待线程。
ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ };
threadDoneHandler += delegate { threadDoneHandler = null; };</code>
Salin selepas log masuk

5. Gunakan operasi tak segerak

<code class="language-csharp">Task<int> task = Task.Run(() =>
{
  return action1();
});

// 等待任务完成。
int result = task.Result;</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan