Answer the question
In order to leave comments, you need to log in
Why are the old values stored in the stream?
Please help, why are the old values saved in the BackgroundWorker thread?
BackgroundWorker bw = new BackgroundWorker();
private void button2_Click(object sender, EventArgs e) // запуск таймера класс BackgroundWorker
{
key = true;
int i = 0;
Text = "Таймер. Время: " + i;
Timer time = new Timer();
bw.DoWork += (o, eo) => // событие потока (событие работает до того момента пока не завершится действие)
{
for (;key;)
{
Invoke(new Action(() => // делегат позволяет получить безопасный доступ к элементам главного потока, то есть из потока в котором был запущен поток
{
i = time.Time(i);
Text = "Таймер. Время: " + i;
}));
Thread.Sleep(1000);
}
};
bw.RunWorkerAsync(); // старт потока
}
private void button3_Click(object sender, EventArgs e)
{
if (bw != null) // если поток запущен
{
key = false;
bw.WorkerSupportsCancellation = true; // при завершении события DoWork WorkerSupportsCancellation устанавливается true, это нужно для того, чтобы завершить поток. Но так как DoWork не завершён, то мы принудительно указываем true
bw.CancelAsync(); // уничтожение потока
}
}
public class Timer // типо таймер
{
public int Time(int i)
{
i++;
return i;
}
}
Answer the question
In order to leave comments, you need to log in
I made some small changes:
bool key;
Timer time; /*вынес класс*/
volatile int i; /*вынес i и пометил как volotile, но если у вас Intel и один поток, то это не обязательно*/
BackgroundWorker bw = new BackgroundWorker();
private void button2_Click(object sender, EventArgs e) // запуск таймера класс BackgroundWorker
{
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question