我有一个父线程(非UI)创建一些子线程来做一些工作,这些孩子来自不同的类(听起来很奇怪,但代码示例将说明它) - 在某些时候父母必须等待某些任务到由子线程完成 - 这并不意味着孩子已经完成但只是已达到某一点并且父母现在可以继续处理...
显然这是一个例子来说明我的情况...生活不是这么简单:)(对不起重新发布 - 试图将此作为评论添加到我以前的那个,但代码永远不会出来正确)...
class A
{
private ManualResetEvent manualResetEvent;
public A()
{
manualResetEvent = new ManualResetEvent(false);
B child = new B();
if (manualResetEvent;.WaitOne(1000, false))
{
... do the work I was waiting on ...
}
}
};
Class B
{
public B()
{
Thread childThread = new Thread(new ThreadStart(Manage));
childThread.IsBackground = true;
childThread.Name = "NamedPipe Manager";
childThread.Start();
private void Manage()
{
... do some work ...
... call some functions ...
// SIGNAL TO Class A THAT IT CAN CONTINUE //
manualResetEvent.Set(); // this won't compile because obviously it has no clue what manualResetEvent is ... different class
... do more work ...
... call more functions ...
}
}
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这与之前有点不同......现在我们有两个不同的类(A和B) - 这引发的问题是B看不到A的manualResetEvent,因此无法做.Set通知它...
任何人都有关于如何以线程安全的方式完成此任务的任何建议?任何帮助将非常感激.谢谢,
将ManualResetEvent引用作为参数传递给B构造函数?
您也可以让B类创建自己的ManualResetEvent并通过属性公开它,但是如果所有B子线程必须共享同一个对象,则第一个选项将更可取.
| 归档时间: |
|
| 查看次数: |
1662 次 |
| 最近记录: |