c# - 将 Invoke 与扩展应用程序上下文的 UI 元素一起使用?

标签 c# multithreading user-interface invoke notifyicon

我有一个 taskBarIcon 元素扩展了我的整个 UI 设计的应用程序上下文。这是因为该应用程序的原始功能是运行后台进程并简单地提供图标作为应用程序正在运行的确认。 但是,我现在以菜单的形式添加额外的功能,可以通过右键单击图标来访问,并且由于核心功能在一个线程上运行,而主线程上的图标,我在访问图标时遇到了问题在需要显示通知气泡的简单情况下。没有其他点可以让两个线程访问同一内存,因此同步并不是真正的问题。

我用惯了Java,这个过程简单多了。我已经阅读了我能找到的关于 C# 需要的调用委托(delegate)舞蹈的文章,但没有一篇文章是特定于扩展应用程序上下文的对象的。我当前的实现太难以预测,无法保证生产安全。

我的问题是:如何将消息发送到其他进程以显示通知气泡,而不影响菜单的可访问性?具体来说,一个包含扩展应用程序上下文的 UI 类和调用 invoke 方法的单独线程上的类的简单示例将非常有帮助。

非常感谢任何帮助!

坏 Pandas

最佳答案

您也可以在创建通知气泡的同一线程上使用分配给 SynchronizationContext.CurrentSynchronizationContext 对象。然后,您可以将 SynchronizationContext 对象传递到菜单所在的任何组件,它会使用 context.Send(....) 发送消息。或者,如果您有权访问通知气泡组件或它所在的表单,您可以执行 form.Invoke((MethodInvoker)delegate {....});

关于c# - 将 Invoke 与扩展应用程序上下文的 UI 元素一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102979/

相关文章:

c# - 使用 C# 以编程方式取消 gridview 行编辑模式

c# - 如何将包含逗号分隔字符串值的字典转换为键值对集合?

java - 嵌套 Platform.runLater 调用与顺序调用 : When is it safe to read side effects of layout that happened on the JavaFX Application thread?

javascript - 在 Kendo UI 网格中处理 100 万条记录

java - 超时后调用方法

listview - 从 Listview Control 复选框中获取通知代码

c# - 数组项的排列

c# - 绑定(bind)到项目模板中的字典

c - thrd_busy 和 mtx_lock()/mtx_timedlock()

multithreading - 为什么在线程方面需要 "move"关键字;为什么我永远不想要这种行为?