【问题标题】:Button.PerformClick() across threadButton.PerformClick() 跨线程
【发布时间】:2014-08-15 03:03:34
【问题描述】:

查看此代码:

    Imports System.Threading

    Private trd As Thread

  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    trd = New Thread(AddressOf ThreadTask)
    trd.IsBackground = True
    trd.Start()
  End Sub

Sub ThreadTask()
    Thread.Sleep(50)
    Button4.PerformClick()
End Sub

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click        
    Me.Close()
End Sub

我正在尝试模拟来自不同线程的按钮单击,但出现以下错误:“System.Windows.Forms.dll 中发生类型为 'System.InvalidOperationException' 的未处理异常”,在 Button4.PerformClick () 行。

如何跨线程使用这个函数?

【问题讨论】:

    标签: vb.net multithreading thread-safety


    【解决方案1】:

    您需要在创建控件的同一线程上执行 UI 命令。我们可以通过委托来做到这一点。这可以通过 lambda 轻松完成。

    用这个替换Button4.PerformClick()

    Me.Invoke(Sub() Button4.PerformClick())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2023-03-12
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多