2016-05-08 30 views
-1

我到处寻找答案,我认为这很容易找到,但显然不是。我听说过调用,但我不知道如何使用它或它是什么。 这里是我的代码:C#如何禁用在主线程上运行的按钮?

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'就是线索。永远不要试图从线程更新UI组件。在MSDN中查找它。 – t0mm13b

+0

你为什么试图在另一个线程中进行更新? – Enigmativity

回答

3

在后台线程上的WinForms组件使用Invoke()到UI线程上执行代码:

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

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

+0

谢谢你的工作:)但是我需要编辑它。它现在这个; 'this.Invoke(new Action()=> { this.button1.Enabled = true; this.textBox2.Text =“whatever”; });' –