Systems.timer.timer多余的多线程

时间:2011-07-14 18:35:23

标签: vb.net multithreading

我最近将我的代码从使用windows.forms.timer切换到systems.timer.timer,导致多线程错误。我正在使用计时器来触发一个事件,因此多线程应该不是问题。为了提供更多细节,我在下面实现了计时器: 在课程的顶部,我有:

Private Shared timr1sec As System.Timers.Timer

程序加载时(Private Sub Test_load):

timr1sec = New System.Timers.Timer(1000)
AddHandler timr1sec.Elapsed, AddressOf OnTimedEvent

在OnTimedEvent中,我调用了几个子程序,并使用ListView对象将一些数据写入屏幕。 VisualExpress在此代码的最后一行抛出多线程错误,该代码位于OnTimedEvent

    Dim itm As New ListViewItem(str(0))

    itm.SubItems.Add(str(1))
    itm.SubItems.Add(str(2))
    itm.SubItems.Add(str(3))
    itm.SubItems.Add(str(4))
    itm.SubItems.Add(str(5))

    ListView1.Items.AddRange(New ListViewItem() {itm})

知道这个新计时器是什么导致VisualExpress说我是多线程?

1 个答案:

答案 0 :(得分:3)

System.Timers.Timer在线程池线程上引发其Elapsed事件。

您应该使用System.Windows.Forms.Timer,它始终使用UI线程。

如果您真的想要,可以在SynchronizingObject上设置Timers.Timer属性,告诉它将其事件封送到UI线程,但没有意义。