0

我必须在代码中运行一个线程创建。在 form1 中,我有一个按钮,可以运行新的单独线程来详细说明一些数据,所以我需要它来不冻结表单。

我有初始化线程:

dim th as thread = new thread (addressof elaborate)

在 button.click 事件中:

th.isbackground= true
th.start()

现在,在表单加载时,我已经对我的程序进行了图标化,但是当我启动新线程时,托盘图标会从中复制。我想解决启动新线程时不显示新通知图标的问题。

有任何想法吗?

(我在网上没有找到任何东西,使用多线程时只出现多个通知图标

4

1 回答 1

0

在该类中创建一个名为 Elab 的类,放置一个名为 work 的子类向您的表单添加一个禁用的计时器

记号为 1000

在您的表单类中声明:

Dim El as Elab

在 Form_Load() 里面放:

El = New Elab()

在你的按钮下,把这个:

Dim gThread as new System.Threading.Thread(Address of El.Work)
Timer1.Enabled = True

在 Elab 内部声明一个名为 Result 的变量:

Public Result as boolean

当 elab 完成它正在做的任何事情时,将结果设置为 true,并将结果存储在公共变量中,以便以后访问。

计时器内部:

If El.Result = True then
   'Get results, deal with data
end if

这不是写得特别好,也不是一个工作示例,但只是为您指出正确的方向,通过为线程提供类中子的地址,然后您可以从其他线程访问同一个类,这意味着您的表单不会冻结,并且您没有创建表单的新实例,您只是在访问现有的类子例程;一旦线程完成,请确保为自己提供一种获取结果的方法(在此示例中,我建议使用计时器,但“获取结果”按钮将执行相同的工作)。

记住:如果您需要 Elab 在代码的特定部分可以继续之前完成(例如,elab 可能添加两个数字,并且您需要结果才能继续),您可以启动线程并执行以下操作:

Do until El.Result = True
    Application.DoEvents()
    System.Threading.Thread.Sleep(1)
Loop

gThread.Join()

希望这有所帮助。

所以你的问题的答案是;不要把你的子放在一个表单中,而是把它放在一个你可以创建一个实例的类中。

于 2011-09-25T17:39:35.023 回答