小编MaB*_*aBi的帖子

在创建窗口句柄之前,无法在控件上调用VB.NET Invoke,但是创建了句柄

这是我的情况,有2个类和我的主要表单Form1:

Class1:有一个方法doSomethingAndCall(callback)创建一个新线程Class2:具有动态创建的控件,带有一个触发Class1.doSomethingAndCall(newCallback)的按钮

在代码中它看起来像这样(它从Class2.Button_Click开始):

Class Class1
  public shared sub doSomethingAndCallAsync(state as object)
    Console.WriteLine(Form1.InvokeRequired) 'output: false
    Console.WriteLine(Form1.IsHandleCreated) 'output: false
    Form1.Invoke(state.callback) 'throws System.InvalidOperationException
  end sub

  public shared sub doSomethingAndCall(callback as object)
    System.Threading.ThreadPool.QueueUserWorkItem(AddressOf doSomethingAndCallAsync, New With {.callback = callback})
  end sub
End Class

Class Class2
  Public Delegate Sub doSomethingDelegate()

  Public Sub doSomething()
    Console.WriteLine("success!")
  End Sub

  Public Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Class1.doSomethingAndCall(New doSomethingDelegate(AddressOf doSomething))
  End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

我得到的确切例外是:

在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke

并且我可以看到第4行中的console.WriteLine向我显示该表单实际上并未创建.所以我添加了这个处理程序,现在它真的很混乱:

 Private Sub Form1_HandleCreated(sender As Object, e As System.EventArgs) Handles …
Run Code Online (Sandbox Code Playgroud)

vb.net multithreading invoke winforms

3
推荐指数
1
解决办法
2968
查看次数

标签 统计

invoke ×1

multithreading ×1

vb.net ×1

winforms ×1