Windows Form Console Problem

Peter86

Erfahrenes Mitglied
Hallo, ich nutze auf einer Form eine Textbox als console, auf die ich über einen anderen Thread zugreifen will. Wenn ich aus der Class, in der ich den Thread gestartet habe, versuche einen Text einzufügen ist das kein Problem, doch versuche ich es aus einer anderen Class passiert einfach nichts, was muss ich tun?

So sieht der Code für meine Console aus:
Code:
Delegate Sub ConsoleDelegate(ByVal text As String)
    Public Sub ConsoleWriteLine(ByVal text As String)
        If Me.InvokeRequired Then
            Me.Invoke(New ConsoleDelegate(AddressOf ConsoleWriteLine), text)
        Else
            Me.txtConsole.Text &= vbNewLine & text
        End If
    End Sub


Ich hoffe ihr könnt mir helfen.

MfG Peter86
 
Es passiert einfach "nichts"? Kannst du das genauer beschreiben? Kannst du mal mit dem Debugger durchgehen und sagen ab wann "nichts" mehr passiert?
 
Ich starte einen Thread, schreibe ich nun aus diesem Thread in meine Console klappt alles, doch sobald ich aus einer anderen Klasse versuche in meine Console zu schreiben passiert einfach nichts. Folgendes beispiel:


Code:
    Public Class Form1

        Delegate Sub ConsoleDelegate(ByVal text As String)
        Friend Sub ConsoleWriteLine(ByVal text As String)

            If Me.InvokeRequired Then
                MsgBox(text)
                Me.Invoke(New ConsoleDelegate(AddressOf ConsoleWriteLine), text)
            Else
                Me.txtConsole.Text &= vbNewLine & text
            End If
        End Sub


        Sub bla()
            Dim t As New Thread(AddressOf Start)
            t.Start()
        End Sub

        Sub Start()
            Dim cl As New Class2
        End Sub

    End Class

    Class Class2
        Sub Test()
            Form1.ConsoleWriteLine("test")
        End Sub
    End Class

Es wird zwar aufgerufen aber es erscheint einfach kein text in der console :confused:
 
Nach obigem Beispiel rufst du die ConsoleWriteline-Methode auch gar nicht auf!
Probier mal das hier anstatt Zeile 20 bis 22:
Code:
Sub Start()
    Dim cl As New Class2
    cl.Test()
End Sub
 
Ich benutze auch nich das beispiel 1:1, in meinem code rufe ich es schon auf, hab auch schon eine msgbox rein gesetzt um zu gucken obs aufgerufen wird, die msgbox erscheint mit text, nur leider nichts in der Console.
 
Um es etwas deutlicher zu machen hab ich ein beispiel an diesen beitrag angehängt... Ich hoffe mir kann jemand bei meinem Problem helfen.

Danke,
Peter.
 

Anhänge

  • console.zip
    10,7 KB · Aufrufe: 14
Ok Folgendes:
"Form1" ist der Klassenname, nicht aber das Objekt, auf das du eigentlich zugreifen willst.
So sollte es funktionieren:
Code:
Dim b As New Class1
b.Test(Me)
zusammen mit einer geänderten Definition der Test-Methode:
Code:
Sub Test(ByVal objForm1 As Form1)
    objForm1.ConsoleWriteLine("Dieser Text wird jetzt angezeigt werden!")
End Sub
Ein bisschen Erklärung:
Stell dir folgenden Code vor:
Code:
Dim neueFormA As Form1
Dim neueFormB as Form1
' erstelle eine neue Form1
neueFormA = New Form1
neueFormA.Show()
' erstelle noch eine neue Form1
neueFormB = New Form1
neueFormB.Show()
Woher soll das Programm jetzt wissen, welche der Forms du meinst, wenn du nur "Form1.ConsoleWriteline" in den Code schreibst? Hier müsstest du schreiben "neueFormA.ConsoleWriteline(...)" oder "neueFormB.ConsoleWriteline(...)"
Warum die Entwicklungsumgebung bei deinem Projekt keinen Fehler auswirft verstehe ich nicht, eigentlich dürfte es überhaupt nicht klappen, was du da geschrieben hast ^^
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück