2010-03-16 22 views
5

çağırır ekstresinde durak:vb.NET'te Me.Invoke aslında "başlatmak" değildir - ipler Aşağıdaki kodu var

Public Delegate Sub SetStatusBarTextDelegate(ByVal StatusText As String) 
Private Sub SetStatusBarText(ByVal StatusText As String) 
    If Me.InvokeRequired Then 
     Me.Invoke(New SetStatusBarTextDelegate(AddressOf SetStatusBarText), StatusText) 
    Else 
     Me.labelScanningProgress.Text = StatusText 
    End If 
End Sub 

problem, ben "SetStatusBarText" çağırdığınızda Başka bir iş parçacığı alt, InvokeRequired True (olması gerektiği gibi), ancak sonra benim iş parçacığı Me.Invoke deyiminde durdu - yürütme duraklatma, yalnızca orada oturan, aslında hiçbir şey çağırmak değil, hepsini gösterir.

İpliklerin neden Invoke'den korktuğuna dair herhangi bir düşünce var mı?

cevap

5

Invoke yöntemi, ana iş parçasında yöntem çağrısını gerçekleştirmek için ileti sırasına bir mesaj koyar. Bu, mesaj pompalı bir ana diziye ihtiyacınız olduğu anlamına gelir. Ana iş parçacığı meşgulse veya bunu bir ileti pompası olmadan bir uygulamada yapıyorsanız (ör. Bir konsol uygulaması), ileti yalnızca kuyrukta kalır.

+1

Tam olarak bu da devam ediyordu - "Me.Invoke" ana iş parçacığının yanıt vermesini bekliyordu, ancak ana iş parçacığı, iş parçacığının son iş parçacığı olduğu için iş parçacığı Threadpool'a tıkıştırmakla meşgul. Bahşişin için teşekkürler. – SqlRyan

+1

Teşekkürler! Invokes'ın bitirmesini bekledim ama hepsi donmuştu. System.Windows.Forms.Application.DoEvents() için bir çağrı ekledim ve çalışır. –