3

背景: 我正在使用一个相对简单的 winforms 应用程序,它是在 Visual Studio 2010 的 .NET 3.5 框架上用 VB.NET 编写的。

问题: 打开程序时,FormLoad 事件会创建两个线程。一个处理自动更新检查,另一个执行一项耗时的任务,将文件与互联网同步。这些线程初始化如下:

   Dim update_check_thread As New Threading.Thread(AddressOf auto_update_check)
   update_check_thread.IsBackground = True
   update_check_thread.Start()

该窗体还使用 NotifyIcon 控件在任务栏上绘制通知图标。不幸的是,每个线程启动都会导致应用程序在任务栏上绘制一个附加图标。在打开程序后使用任何线程函数时(有时)会绘制附加图标。

有没有办法“限制”表单允许绘制的图标数量?我已经尝试将代码移动到后台工作人员,但是同样的事情继续发生。

提前致谢!

4

3 回答 3

4

这是 VB.NET 中常见的问题。它支持可怕的“将类名用作对象”语法,例如 Form1.Show()。当您使用线程时,这总是会引起麻烦,当在线程上使用时,像这样引用类名会创建 Form1 类的新实例。另一种形式,它是不可见的,因为它的 Show() 方法从未被调用过。但是您确实看到了额外的 NotifyIcon。你必须解决这个问题,它也会引起其他麻烦,因为你认为对可见形式所做的任何事情实际上都发生在不可见形式上。

将 Sub New 添加到类并在其上设置断点以查找执行此操作的代码。

于 2011-05-13T09:59:28.680 回答
0

我做了另一个不太优雅但更简单的解决方案,我将通知图标控件放在我从不使用的表单中:) 并用 FrmIcon.NotifyIcon1.Visible=True 显示它

于 2012-03-22T10:58:41.670 回答
0

这是一个旧线程,但我的解决方案是在设计器属性面板中设置“NotifyIcon.Visible = False”,并在 Form 的 Load() 事件中添加“NotifyIcon.Visible = True”。

于 2018-01-25T15:15:46.787 回答