6

Şimdi bunu birkaç gün boyunca anlamaya çalışıyorum ve eksik bir şey mi yoksa tamamen yanlış mı olduğunu merak ediyorum.VB.NET Çoklu okuma. Bir sınıftaki bir UI Denetimi üzerinde bir çağrıyı çağırmak, ayrı bir sınıf dosyasındaki

Örnek: İki dosyaları - aşağıdaki gibi görünüyor


TestClass.vb TestClass.vb, myForm.vb:

Imports System.Threading 

Public Class TestClass 
    Private myClassThread As New Thread(AddressOf StartMyClassThread) 

    Public Sub Start() 
     myClassThread.Start() 
    End Sub 

    Private Sub StartMyClassThread() 
     myForm.Msg("Testing Message") 
    End Sub 
End Class 

myForm.vb bir ile temel bir formdur Liste kutusu kontrolü ve sırasıyla Çıkış ve StartButton adlı bir düğme kontrolü. aşağıdaki formu arkasında kod gibidir:

Public Class myForm 
    Private classEntity As New TestClass 

    Private Sub StartButton_Click(ByVal sender As System.Object, _ 
            ByVal e As System.EventArgs) _ 
           Handles StartButton.Click 
     Msg("Start Button Pressed") 
     classEntity.Start() 
    End Sub 

    Delegate Sub MsgCallBack(ByVal mesg As String) 

    Public Sub Msg(ByVal mesg As String) 
     If Output.InvokeRequired Then 
      MsgBox("Invoked") 
      Dim d As New MsgCallBack(AddressOf Msg) 
      Invoke(d, New Object() {mesg}) 
     Else 
      MsgBox("Not Invoked") 
      mesg.Trim() 
      Output.Items.Add(mesg) 
     End If 
    End Sub 
End Class 

sonucu:

Uygulama çalıştığında, hiçbir hata veya istisnalar. Görüntülenen liste kutusu ve Başlat düğmesi. Başlat düğmesine bastığımda msgbox beklendiği gibi "Notum" yazıyor ve OK tuşuna bastığınızda "Start Button Pressed" (Başlat Düğmesi Basıldı), Output liste kutusu kontrolüne ekleniyor. Hemen msgbox'ın tekrar açıldığını ve "Çağırılmadı" yazdığını söylüyor. Çıkış liste kutusu denetimini kullanmaya çalışan ayrı bir iş parçacığı olarak "davet edildi" bekliyordum. Elbette bu, çıktı UI denetimini doğrudan güncelleştirmesine izin verilmediği için görünür hiçbir sonuçla sonuçlanmayan Output.Items.Add denenmesiyle sonuçlanır.

Çukur düşmelerini ve yöntemlerini iyice anlamaya çalışan farklı sayfalardaki küçük bir kitap okumalıydım ama insanların yapabileceği bir tuzağa düşmüş olabileceğimi hissediyorum. Şu andaki anlayış ve bilgimle bu tuzaktan çıkamıyorum ve herhangi bir girdi ya da tavsiyeyi takdir edemiyorum.

Saygılarımızla

Lex

cevap

3

Buradaki sorun değil Myform bir örneğinde işlevini Msg aradığınız olduğunu, ancak sınıf MyForm paylaşılan fonksiyonu olarak.

Public FormInstance as myForm 

ekleyin ve sonra StartButton_Click yılında satırı ekleyin

myForm.Msg("Testing Message") 

Sonra

FormInstance.Msg("Testing Message") 

ile yerine TestClass kodunuzu değiştirin

classEntity.FormInstance = Me 

ve beklenen sonucu alacaksınız.

+0

Soumya92 - Mükemmel! Çok teşekkür ederim. İtibarın izin verdiği ölçüde 'oy vereceğim'. – Lecronox

İlgili konular