Laden...

Ungültiger threadübergreifender Vorgang beim Zugriff auf das GUI per TraceListener

Erstellt von digi333 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.161 Views
D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 13 Jahren
Ungültiger threadübergreifender Vorgang beim Zugriff auf das GUI per TraceListener

Die Fehlermeldung "Ungültiger threadübergreifender Vorgang" bekomme ich relativ häufig hin und ich verstehe nicht wie es dazu kommt. Ich hab diesmal als Beispiel ein 4 Zeilen Beispiel dabei (im Anhang der ganze Code).

Ein Hauptprogramm mit einem BackGroundWorker und ein zweiter Thread der Trace.Listeners macht. Beim Arbeiten mit beidem kommt die besagte Fehlermeldung, aber warum?


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync(null);
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            System.Diagnostics.Debug.Write("Hallo");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.DebugConsole.Instance.Init(false, true);
        }

    }

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

mittlerweile solltest du wissen dass es eine Forensuche und FAQ gibt.
zB [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Beachte bitte auch [Hinweis] Wie poste ich richtig? Punkt 1.1

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 13 Jahren

Danke für den Hinweis, aber wie hilft mir das Thema Invoke(), BackgroundWorker und nicht blockierende Gui's weiter, wenn ich eine Frage zu der Kombination habe? Also genau das Thema, dass danach kommt. Ich kann die Dinger erzeugen, jedoch bekomme ich Fehler wenn ich sie gleichzeitig verwende.

5.299 Beiträge seit 2008
vor 13 Jahren

Danke für den Hinweis, aber wie hilft mir das Thema Invoke(), BackgroundWorker und nicht blockierende Gui's weiter, wenn ich eine Frage zu der Kombination habe?

Tja, musst du kombinieren: Du hast einen TraceListener, und der greift auf ein form zu.
Und der BGW läßt den TraceListener tracen. Was denkst du, aus welchem Thread wird ins Form gegrabscht?
Anderer Ansatz: Bei mir gibts eine Fehlermeldung mit blauer Schrift. Das ist ein Link, der wo hinführt, wos auch nochmal erklärt wird.

Der frühe Apfel fängt den Wurm.

T
381 Beiträge seit 2009
vor 13 Jahren

Debug mal was in der variable folgenden steht:


this.InvokeRequired

U
1.688 Beiträge seit 2007
vor 13 Jahren

Hallo,

Ich hab diesmal als Beispiel ein 4 Zeilen Beispiel dabei (im Anhang der ganze Code).

bitte beachte [Hinweis] Wie poste ich richtig? 4.1 und 5. Deinen geposteten Zeilen kann ich nicht entnehmen, wann und wo eine Exception auftritt.

Die Antwort scheint doch nach dem Hinweis auf die FAQ von gfoidl auch offensichtlich: irgendwo greifst Du aus einem Hintergrundthread auf die GUI zu. Dies zu finden kann doch nicht so schwer sein, da Visual Studio Dir Auftreten der Exception und StackTrace anzeigt.