C# 等待线程完成的标准方法
在另一个线程中等待进程完成的标准方式是什么C# 等待线程完成的标准方法,c#,multithreading,C#,Multithreading,在另一个线程中等待进程完成的标准方式是什么 在我的例子中,我有一个多线程服务,我希望确保当请求服务停止时,处理在服务退出之前完成。我应该使用吗?您可以保留一个列表,当服务停止时,调用线程。依次加入其中的每个线程。这将一直等到每个人都退出。您可以保留一个列表,当服务停止时,调用线程。依次加入每个线程。这将一直等到每个线程都退出。如果有对等待完成的线程的引用,可以对这些引用调用.Join()方法。这将导致主线程等待调用.Join()的线程完成后再继续 或者,您可以创建一个ManualResetEve
在我的例子中,我有一个多线程服务,我希望确保当请求服务停止时,处理在服务退出之前完成。我应该使用吗?您可以保留一个列表,当服务停止时,调用线程。依次加入其中的每个线程。这将一直等到每个人都退出。您可以保留一个列表,当服务停止时,调用线程。依次加入每个线程。这将一直等到每个线程都退出。如果有对等待完成的线程的引用,可以对这些引用调用.Join()方法。这将导致主线程等待调用.Join()的线程完成后再继续 或者,您可以创建一个ManualResetEvents数组,主线程和子线程都可以访问该数组。每个子线程都有一个对主线程有权访问的数组中的一个事件的引用。在主线程末尾的事件数组上调用WaitHandle.WaitAll(事件数组),并在每个子线程末尾的事件上调用.Set(),以指示主线程子线程已完成 在主线程退出之前,以下将一直阻止,直到所有子线程对其事件调用.Set()
WaitHandle.WaitAll(事件数组) 如果有对等待完成的线程的引用,可以对这些引用调用.Join()方法。这将导致主线程等待调用.Join()的线程完成后再继续 或者,您可以创建一个ManualResetEvents数组,主线程和子线程都可以访问该数组。每个子线程都有一个对主线程有权访问的数组中的一个事件的引用。在主线程末尾的事件数组上调用WaitHandle.WaitAll(事件数组),并在每个子线程末尾的事件上调用.Set(),以指示主线程子线程已完成 在主线程退出之前,以下将一直阻止,直到所有子线程对其事件调用.Set()
WaitHandle.WaitAll(事件数组) 我想你的意思是“等待线程完成的标准方法”。进程有线程,而不是相反。我想你的意思是“等待线程完成的标准方法”。进程有线程,反之亦然。请记住,WaitAll最多只允许64个句柄等待。在service stop事件处理程序中,您可能需要迭代所有事件并在所有句柄上显式调用WaitOne。请记住,WaitAll最多只允许64个句柄等待。在service stop事件处理程序中,您可能需要迭代所有句柄事件并在所有句柄上显式调用WaitOne