我已经看过很多关于控制问题的帖子.禁止挂起应用程序,但它们似乎主要限于那些在.NET 1.1上运行的应用程序.我也看到了使用.BeginInvoke的建议,而不是我试过但无济于事..BeginInvoke不会挂起但它也不会调用委托.我主要担心的是,我已经使用.Invoke多年没有任何问题,我在该领域有一个主要的应用程序广泛使用它,我担心这个问题会出现在那里.就我的工作代码和失败的代码而言,我没有做任何不同的事情.我写了一个简单的代码来复制问题(全部在4.0 VS2010中):
Public Class Form1
Private WithEvents sat As TestInvoke
Private Delegate Sub doTheUpdateDelegate(ByVal message As String)
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
sat = New TestInvoke
sat.startAThread()
End Sub
Public Class TestInvoke
Public Event UpdateControl()
Public Sub startAThread()
Dim t As New Threading.Thread(AddressOf _startAThread)
Dim trace As String
trace = "a"
t.SetApartmentState(Threading.ApartmentState.STA)
t.Start()
t.Join()
End Sub
Protected Sub _startAThread()
Try
For k = 0 To 10
System.Threading.Thread.Sleep(1000)
k += 1
RaiseEvent UpdateControl()
Next
Catch …Run Code Online (Sandbox Code Playgroud)