Hallo Liebe Forengemeinde.
Ich benötige einmal eure Hilfe !
Ich habe 2 Forms Eins davon beinhaltet ein Listview ( view=Details ) welches mir als Console bzw. LogFenster dienen soll ( Consolen Form ) . Auf dem 2 Form werden Diverse Operationen ausgeführt ( Arbeits Form ).
Wenn ich jetzt von der Arbeitsform einen Eintrag ins Consolenform machen möchte ist es alles Kein Problem solange ich im GUI Thread Bin starte ich jetzt aber einen neuen Thread in der Arbeitsform dann bekomme ich keinen Eintrag mehr zustande.
Zunächst dachte ich das ich das per invoke + Delegaten machen muss, aber leider vergebens ! Es klappt nicht ....
Hier mein Testcode mit dem ich es versuche !
ARBEITS FORM:
CONSOLEN FORM:
PS: Mir ist klar das ich as mit dem Backgroundworker auch per ProgressChanged changed machen kann, dann klappt es auch !
Ziel der Sache soll aber sein das ich egal aus welchem Thread heraus eine message auf der Console ausgeben möchte, und nicht erst aus dem ProgressChanged nochmals einen Funktionsaufruf machen möchte. Zumal ich nicht jedes Mal mit einem BGW Arbeiten möchte sondern auch einfach so Threads Starten muss.
Inderessant ist auch die Tatsache das wenn ich im Backgroundworker eine Nachricht an die Consolen Form schicke, kommt diese auch Problemlos dort an. Aber dort wiederum wird von meiner Prüfroutine
Nicht erkannt das es sich um eine Anforderung aus einem Fremden Thread handelt.
Ich wäre euch super Dankbar für eine Hilfestellung zu diesem Problem.
Mfg: Lordnicon
Ich benötige einmal eure Hilfe !
Ich habe 2 Forms Eins davon beinhaltet ein Listview ( view=Details ) welches mir als Console bzw. LogFenster dienen soll ( Consolen Form ) . Auf dem 2 Form werden Diverse Operationen ausgeführt ( Arbeits Form ).
Wenn ich jetzt von der Arbeitsform einen Eintrag ins Consolenform machen möchte ist es alles Kein Problem solange ich im GUI Thread Bin starte ich jetzt aber einen neuen Thread in der Arbeitsform dann bekomme ich keinen Eintrag mehr zustande.
Zunächst dachte ich das ich das per invoke + Delegaten machen muss, aber leider vergebens ! Es klappt nicht ....
Hier mein Testcode mit dem ich es versuche !
ARBEITS FORM:
Code:
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork For i As Integer = 0 To 100 Threading.Thread.Sleep(3000) pt_console.LOGGING("MEINE MESSAGE ......", Color.Yellow) Next End Sub
CONSOLEN FORM:
Code:
Public Delegate Sub eventlog_delegate(ByVal messagetext As String, ByVal messagecolor As Color) Public Sub LOGGING(ByVal messagetext As String, ByVal messagecolor As Color) If eventlog.InvokeRequired = True Then eventlog.Invoke(New eventlog_delegate(AddressOf entry_message), "DELEGATE:" & messagetext, messagecolor) Else entry_message(messagetext, messagecolor) End If End Sub Sub entry_message(ByVal messagetext As String, ByVal messagecolor As Color) eventlog.Items.Add(messagetext).ForeColor = messagecolor eventlog.EnsureVisible(eventlog.Items.Count - 1) End Sub Private Sub eventlog_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles eventlog.DrawItem e.DrawText() End Sub
PS: Mir ist klar das ich as mit dem Backgroundworker auch per ProgressChanged changed machen kann, dann klappt es auch !
Ziel der Sache soll aber sein das ich egal aus welchem Thread heraus eine message auf der Console ausgeben möchte, und nicht erst aus dem ProgressChanged nochmals einen Funktionsaufruf machen möchte. Zumal ich nicht jedes Mal mit einem BGW Arbeiten möchte sondern auch einfach so Threads Starten muss.
Inderessant ist auch die Tatsache das wenn ich im Backgroundworker eine Nachricht an die Consolen Form schicke, kommt diese auch Problemlos dort an. Aber dort wiederum wird von meiner Prüfroutine
Code:
If eventlog.InvokeRequired = True Then
Ich wäre euch super Dankbar für eine Hilfestellung zu diesem Problem.
Mfg: Lordnicon
Comment