gpt4 book ai didi

c# - 如何在 C# 中引发静态事件线程安全?

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:18 25 4
gpt4 key购买 nike

我可以引发一个静态事件线程安全吗? (我什至不完全确定这意味着什么。)整个事情是音频应用程序的一部分,所以我(至少)有音频处理线程和 UI 线程。

RaisePrintEvent 从处理音频和其他消息的非托管 C 代码中调用。引发事件的调用可以从音频处理线程和 UI 线程发生。

public static event ProcessPrint Print = delegate {};

private static void RaisePrintEvent(string e)
{
Print(e);
}

我如何确定事件调用是同步的?或者可能只是在主线程中调用..

编辑:在此处阅读 a smart solution .

最佳答案

您必须确保 UI 操作都在主/UI 线程上执行。

最好的方法是将消息从音频线程排队到某种形式的队列中,然后从主 UI 线程(例如 Forms.Timer 事件)出队并显示它。

Invoke() 不会让您走得太远,因为您在音频处理中的计时会被打破。如果你尝试它,并且你正在用你的 GUI 做一些事情,你可能会在音频中抽搐,因为 Invoke()-ing 其他线程上的东西会阻塞,直到其他线程处理用于执行 Invoke 的窗口消息在引擎盖下”。

如果您不理解上述部分或全部内容,请尝试使用消息队列。

关于c# - 如何在 C# 中引发静态事件线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10466022/

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