2016-01-28 2 views
2

Я искал около 3 часов и не могу заставить этот вызов работать. Мне нужно вызвать, потому что его вызывает другой поток и говорит, что он нестабилен.Вызовите себя, чтобы обойти разные темы? C#

Вот что я звоню (я называю это так textBox1_TextChanged(null, null);):

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    if(this.InvokeRequired) 
    { 
     this.Invoke(this?WHAT GOES HERE, null); // I know it should be a delegate or something but I can't change this to that 
    } 
    else 
    { 
     string temp = ""; 
     temp += TextToAdd; 
     textBox1.Text = "s"; 
    } 
} 
+1

СОВЕТ: Как правило, вы не хотите использовать 'Invoke', потому что 1) он блокирует рабочий поток. 2) Может привести к тупику резьбы. Подумайте об использовании 'BeginInvoke' вместо этого, как и в ответе Джонаса ниже – MickyD

ответ

2

Вы можете использовать BeginInvoke для обновления пользовательского интерфейса с другого форума.

if (this.InvokeRequired) 
{ 
    var action = new Action(() => textBox1.Text = "s"); 
    this.BeginInvoke(action); 
} 
+0

спасибо, что это сработало, но иногда это происходит http://piclair.com/w77is вы знаете, как это исправить. Еще раз спасибо вам lol –

+0

Не могу сказать так много об этой картине, но похоже, что это поток пользовательского интерфейса, который приходит именно так, если метод вызывается из потока пользовательского интерфейса, не требуется никакого вызова. InvokeRequired from MSDN "Получает значение, указывающее, должен ли вызывающий вызов вызывать метод invoke при вызове метода для элемента управления, потому что вызывающий объект находится в другом потоке, чем тот, над которым был создан элемент управления." –

+0

lol Я положил в попытке, и это, казалось, исправить, но я все еще использую vs, но я думаю, что он исправлен –

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