Если у вас есть ссылка на форму как Form1, и что форма имеет ярлык с именем Label1, который является общественным/доступным для TestClass:
public class TestClass
{
public void myLoop()
{
for (int i = 1; i <= 1000; i++)
{
// show value of i to label
form1.label1.Text = i.ToString();
// allow message pumping to redraw the label
Application.DoEvents();
// pause long enough to see it before the next one happens
System.Threading.Thread.Sleep(100);
}
}
}
Я бы не рекомендовал использовать Application.DoEvents для нормального кода производства; но если вы используете поток пользовательского интерфейса и не используете асинхронный код, это будет «взломанный» способ получить все события оконных событий (в основном WM_PAINT, чтобы получить ярлык для перерисовки) во время цикла.
Лучший способ заключается в использовании события:
public class TestClass {
public class ProgressEventArgs : EventArgs {
public int Value { get; set; }
}
public event EventHandler<ProgressEventArgs> Progress;
public void myLoop() {
for (int i = 0; i <= 1000; ++i) {
var evt = Progress;
if (evt != null) {
evt.Invoke(this, new ProgressEventArgs() { Value = i; });
}
}
}
}
и обрабатывать это событие в виде:
public class TestForm : Form {
private somevent_click(object sender, EventArgs evt) {
var test = new TestClass();
test.Progress += test_Progress;
test.myLoop();
}
private void test_Progress(object sender, TestClass.ProgressEventArgs evt) {
label1.Text = evt.Value;
}
}
Заметим, что это будет происходить в том же потоке, поэтому в зависимости от того, что еще вы сделайте это в своем цикле, вы можете не получить пересылку сообщений. Вместо этого используйте фоновый поток или асинхронный код.
Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу «Как спросить», чтобы помочь прояснить этот вопрос. –
Как вы планируете использовать этот класс в форме? нужно показать номер 1 на 1 –
Обновлено сообщение, я вызываю функцию myLoop в потоке и да, я хочу показать номер 1 на 1. – markandrewkato