gpt4 book ai didi

c# - 当子线程执行某个 Action 时通知父线程 [C#]

转载 作者:行者123 更新时间:2023-12-03 12:57:58 24 4
gpt4 key购买 nike

我有一个父线程(非 UI),它创建一些子线程来做一些工作——在某些时候,父线程必须等待子线程完成某些任务——这并不意味着子线程完成了,而只是它完成了已达到某个点,父级现在可以继续处理...

为了说明,请引用下面的代码,显然这不是我的 children 所做的,但它显示了我想要完成的事情。回想一下,这些都不是 UI 线程......

// Parent Thread
Thread childThread = new Thread(new ThreadStart(Manage));
childThread.IsBackground = true;
childThread.Name = "NamedPipe Manager";
childThread.Start();

while (true)
{
... do some work ...

// wait for signal from MainThread to proceed //

... do more work
}


// Child Thread
private void Manage()
{
... do some work ...
... call some functions ...

// SIGNAL TO PARENT THAT IT CAN CONTINUE //

... do more work ...
... call more functions ...
}

有人对我如何以线程安全的方式完成此任务有任何建议吗?
任何帮助将非常感激。
谢谢,

最佳答案

如果只有一个子线程,您可以使用 ManualResetEvent :

var signal = new ManualResetEvent(false);

// child thread: signal to parent that it can continue
signal.Set();

// parent thread: wait for signal from child thread to proceed
signal.WaitOne();

如果有多个子线程,您可以使用 Semaphore :
var semaphore = new Semaphore(0, numberOfChildThreads);

// child thread: signal to parent that it can continue
semaphore.Release();

// parent thread: wait for signal from each child thread to proceed
for (int i = 0; i < numberOfChildThreads; i++)
{
semaphore.WaitOne();
}

关于c# - 当子线程执行某个 Action 时通知父线程 [C#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1347940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com