gpt4 book ai didi

vb.net - Systems.timer.timer不需要的多线程

转载 作者:行者123 更新时间:2023-12-03 13:21:51 34 4
gpt4 key购买 nike

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

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说我是多线程的新计时器是什么吗?

最佳答案

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

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

如果确实需要,可以在SynchronizingObject上设置Timers.Timer属性,告诉它将其事件编码(marshal)给UI线程,但这没有意义。

关于vb.net - Systems.timer.timer不需要的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698242/

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