2016-05-08 2 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' является ключом. Никогда не пытайтесь обновлять компоненты пользовательского интерфейса из потока. Посмотрите это в MSDN. – t0mm13b

+0

Почему вы пытаетесь сделать обновления в другом потоке? – Enigmativity

ответ

3

В фоновых потоках, используйте Invoke() на WinForms компонентов для выполнения кода в потоке пользовательского интерфейса:

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"; });' –

Смежные вопросы