2016-05-08 5 views
-1

Ich habe überall nach der Antwort gesucht und ich dachte, es wäre einfach zu finden, aber anscheinend nicht. Ich habe davon gehört, aber ich habe keine Ahnung, wie man es benutzt oder was es ist. Hier ist mein Code:C# Wie deaktiviere ich eine Schaltfläche, die auf dem Hauptthread ausgeführt wird?

public void Thread1(object sender, EventArgs e) 
    { 
     this.button1.Enabled = false; 
     this.textBox2.Clear(); 
     this.textBox3.Clear(); 
     this.textBox4.Clear(); 
     this.textBox6.Text = "£" + "0"; 
     //Generate 3 random numbers 

     Stopwatch timer = new Stopwatch(); 
     timer.Start(); 
     this.Refresh(); 
     //This is only part of this function 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     ThreadStart threadStart = new ThreadStart(() => Thread1(sender, e)); 
     Thread newThread = new Thread(threadStart); 
     newThread.Start(); 
    } 
+0

'SafeInvoke' ist der Schlüssel. Versuchen Sie niemals, die UI-Komponenten von einem Thread zu aktualisieren. Schlage es im MSDN nach. – t0mm13b

+0

Warum versuchen Sie, Aktualisierungen in einem anderen Thread vorzunehmen? – Enigmativity

Antwort

3

In Hintergrund-Threads, Invoke() auf WinForms-Komponenten verwenden, um Code auf dem UI-Thread auszuführen:

this.Invoke(() => { 
    this.button1.Enabled = true; 
    this.textBox2.Text = "whatever"; 
}); 

Dokumentation: https://msdn.microsoft.com/en-us/library/a1hetckb.aspx

+0

Danke das hat funktioniert :) aber ich musste es bearbeiten. Es ist jetzt das; 'this.Invoke (new Action() => { this.button1.Enabled = Wahr; this.textBox2.Text = "was auch immer"; });' –