У меня есть программа оконных форм с формой MainForm. При нажатии кнопки я запускаю код, который запускается (импульсы) на каждые 0,5 секунды в другом потоке. Я хочу изменить многие вещи, такие как метки, progressbars на моем MainForm, из метода Pulse. Как это возможно? Так что я хотел бы знать, как вставлять переменные, значения в этот поток и MainForm. Изменяйте друг друга и т. Д.Как передать значения между потоками?
Нажав кнопку foo, я говорю, что я начинаю пульсатор. Pulsator.Initialize();
Вот класс Pulsator:
public static class Pulsator
{
private static Thread _worker;
public static void Initialize()
{
_worker = new Thread(Pulse);
_worker.IsBackground = true;
_worker.Start();
}
public static void Close()
{
if (_worker != null)
{
_worker.Abort();
while (_worker.IsAlive || _worker.ThreadState != ThreadState.Stopped)
{
//closing
}
}
}
public static void Pulse()
{
if (_worker != null)
{
while (true)
{
SomeOtherClass.Pulse();
Thread.Sleep(500);
}
}
else
{
SomeOtherClass.Pulse(); // yeah I know this doesnt needed
}
}
}
SomeOtherClass Импульсный метод выглядит следующим образом:
public static void Pulse()
{
//here I will have several values, variables, and I want to show results,
// values on my MainForm, like:
Random random = new Random();
MainForm.label1.Text = random.Next(123,321).ToString(); // I hope you know what I mean
}
Конечно, это очень сложно, это просто глупый пример.
Также имейте в виду, что вызов Thread.Abort вызывает исключение ThreadAbortException, которое вам необходимо обслуживать в методе Close, http://msdn.microsoft.com/en-us/library/system.threading.thread.abort. aspx – w69rdy