Как изменить текст метки из другой формы? - PullRequest
1 голос
/ 24 августа 2010

Это многопоточная операция в приложении Windows, выполненная в C #. Как я могу изменить это?

Ответы [ 4 ]

4 голосов
/ 24 августа 2010

Вы можете написать метод, который можно вызывать из любого потока:

private void SetLabel(string newText)
{
    Invoke(new Action(() => SomeLabel.Text = NewText));
}

Затем вы можете просто вызвать SetLabel("Update the label, please") из любого потока.

Однако заголовок вашего вопроса гласит: «из другой формы », а не« из другой нити », поэтому неясно, что вы на самом деле имеете в виду.Вам не нужно многопоточность, если вы просто хотите иметь несколько форм.Вы должны использовать потоки только для задач, например, загрузки файла, копирования файла, вычисления значения и т. Д., Но не для форм.

2 голосов
/ 24 августа 2010

Вам нужно использовать делегата и вызывать ...

private delegate void SetLabelSub(string NewText);
private void SetLabel(string NewText)
{
 if (this.InvokeRequired()) {
  SetLabelSub Del = new SetLabelSub(SetLabel);
  this.Invoke(Del, new object[] { NewText });
 } else {
  SomeLabel.Text = NewText;
 }
}

Тогда вы можете просто позвонить SetLabel("New Text Here") из любого потока

1 голос
/ 14 февраля 2013

Как насчет написания более общего метода для изменения свойства Text элемента any в вашей форме, например:

private void SetText(Control control, string text)
{
    if (control.InvokeRequired)
         this.Invoke(new Action<Control>((c) => c.Text = text),control);
    else
        control.Text = newText; 
}

Это будет работать для меток, кнопок и т. Д.поток пользовательского интерфейса или любой другой поток.

0 голосов
/ 24 августа 2010

Если вы имеете дело с потоками, вам нужно использовать метод формы. Invoke(), предполагая, что вы передаете экземпляр формы в другую форму.

Form form1 = new Form()
Form form2 = new Form();
form2.CallingForm = form1; // make this property or what ever

внутри формы2 добавьте код вроде

form1.Invoke(someDelagate, value);

Я не часто делаю winforms, но если вы запустите форму Google. Вызовите несколько хороших примеров того, как выполнять операции с несколькими потоками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...