gpt4 book ai didi

c# - NotifyIcon 事件未触发

转载 作者:太空狗 更新时间:2023-10-30 01:28:03 26 4
gpt4 key购买 nike

我是新来的,刚开始遇到一个非常神秘的问题。我是英国的一名软件开发人员,拥有超过 15 年的经验,但只在 .Net 中开发了 18 个月。我的 NotifyIcon 鼠标事件没有触发!

我正在使用 C# 编写一个应用程序,该应用程序以 NotifyIcon(“主应用程序图标”)启动并在鼠标右键单击时显示 ContextMenu。这工作正常:上下文菜单、表单启动和鼠标单击事件触发。

一点点背景知识:应用程序应该感应到 USB“设备”的插入(确实如此),询问它并创建另一个 NotifyIcon(“设备图标”)以允许用户与该设备交互。我在上一段中提到的“主应用程序图标”允许用户与数据库交互并配置软件。

为了封装这些设备交互功能,我构造了一个“设备类”包含允许与设备交互的设备 NotifyIcon、ContextMenu、表单、鼠标单击事件等。

问题当我从 ManagementEventWatcher EventArrived 事件实例化我的“设备类”时,问题就开始了。如果我在我的程序 Main 中实例化“设备类”,那么当我单击通知图标时事件会正确触发。

那么,有人可以帮助我吗?

提前干杯

马修

最佳答案

IIRC,事件 用法(而不是 WaitForNextEvent)异步工作。我很想知道在哪个线程上引发了事件。我想知道您的图标是否没有消息泵服务消息。

你有表格吗?或者其他带有消息循环的东西?我很想调用表单(使用 Control.Invoke),并要求 form 显示图标 - 从那时起它应该有一个事件的消息泵。


抱歉耽搁了;阅读您的评论,听起来您已经有了广泛的解决方法。唯一的问题是跨线程问题;理想情况下,您会要求 UI 在 UI 线程上进行这样的更改;例如,如果您有一个正在使用的 Form(拥有图标)- 添加到您的表单类:

// not a property, as there is no need to add a complex x-thread "get"
public void SetIconVisible(bool isVisible) {
if(this.InvokeRequired) {
this.Invoke((MethodInvoker) delegate {
myIcon.Visible = isVisible;
});
} else {
myIcon.Visible = isVisible;
}
}

这会对 UI 线程执行线程切换(如果需要)。有什么用吗?

关于c# - NotifyIcon 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1559453/

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