使用多线程时会出现多个通知图标

时间:2011-05-13 09:08:29

标签: .net vb.net winforms multithreading notifyicon

上下文 我正在使用一个相对简单的winforms应用程序,在Visual Studio 2010中的.NET 3.5框架上用VB.NET编写。

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

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

表单还使用NotifyIcon控件在任务栏上绘制通知图标。不幸的是,每个线程启动都会导致应用程序向任务栏绘制一个额外的图标。在程序打开后使用任何线程函数时,会绘制其他图标(有时)。

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

提前致谢!

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

我做了另一种不那么优雅但更容易的解决方案, 我把通知图标控件放在一个我从不使用的表单中:) 我用FrmIcon.NotifyIcon1.Visible = True

显示它

答案 2 :(得分:0)

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