【问题标题】:thread synchronization between c# and c++c#和c++之间的线程同步
【发布时间】:2017-12-08 14:30:13
【问题描述】:

我有一个 C# WPF 应用程序需要调用非托管 C++ DLL 并从中获取简单的事件通知。 DLL 将等待在 .NET 中看不到的键盘事件(当应用程序没有输入焦点时为 VK_MEDIA_PLAY_PAUSE),并通知主应用程序。我找到了一个使用信号量进行跨进程同步的示例,但这似乎有点矫枉过正。同样,使用命名管道、COM、套接字或 p/invoke 似乎超出了我的需要。

具体来说,我将在 WPF 应用程序中启动一个工作线程,该线程将等待键盘事件发出信号,然后通知主 UI 线程执行某些操作。

提前致谢。

【问题讨论】:

  • PostMessage() 带有按钮点击的 ID?
  • 您可以使用命名事件,但如果您能提供代码示例,我们会更有帮助
  • 使用命名事件的建议让我走上了正轨。这正是我想要的。在 C++ 端调用 CreateEvent 并在 C# 端创建一个具有相同名称的 EventWaitHandle 正是我想要的。

标签: c# c++ wpf thread-synchronization .net-native


【解决方案1】:

一旦我指向命名事件的方向,解决方案就变得清晰了。在 C++ 端,CreateEvent 创建命名事件。但在 C# 方面,首先出现的 2 种事件类型是 AutoResetEvent 和 ManualResetEvent,它们不接受名称,而 EventWaitHandle 接受。一旦我找到了那个类,其余的就到位了。在我的项目中,事件在 C++ 端设置以响应所需的击键,C# 端在 BackgroundWorker 线程中等待事件并在它发生时对其进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2011-06-15
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2019-06-17
    相关资源
    最近更新 更多