Answer the question
In order to leave comments, you need to log in
C#: why is IsBackground not working?
Good evening!
I am learning C#. Tell me why the thread does not become asynchronous after IsBackground (the window just hangs while the button is moving)? How right?
public delegate void HelperToColl();
public partial class Form1 : Form
{
HelperToColl HTC;
Random rnd = new Random();
public Form1()
{
InitializeComponent();
HTC = new HelperToColl(car_1_race);
}
private void Start_btn_Click(object sender, EventArgs e)
{
Thread car_1 = new Thread(car_1_race);
car_1.IsBackground = true;
Invoke(HTC);
}
public void car_1_race()
{
while (true)
{
Thread.Sleep(100);
Car_1_btn.Left += rnd.Next(1, 3);
}
}
}
Answer the question
In order to leave comments, you need to log in
Here you need to look towards the Task Parallel Library + using the async-await construct. I made the car_1_race procedure itself asynchronous and used a Task object instead of a Thread object. The program, I’ll say right away, will slow down, but the form will respond to requests.
Here is my implementation:
public delegate void HelperToColl();
public partial class Form1 : Form
{
HelperToColl HTC;
Random rnd = new Random();
public Form1()
{
InitializeComponent();
HTC = new HelperToColl(car_1_race);
}
private void Start_btn_Click(object sender, EventArgs e)
{
//Избавляемся от объекта Thread, он нам здесь не нужен.
//Всю асинхронность прячем внутрь вызываемой процедуры.
//Здесь только обращение к процедуре.
Invoke(HTC);
}
//Здесь надо обратить внимание на слово async.
//Тем самым мы объявляем процедуру асинхронной.
public async void car_1_race()
{
while (true)
{
//Task.Delay(N).Wait() - если я правильно понимаю, это аналог Thread.Sleep(N)
//Я уменьшил со 100 до 50, чтобы не так тормозило.
Task.Delay(50).Wait();
//Получаем значение смещения как результат асинхронного выполнения процедуры,
//возвращающей случайное число; () => {...} - это и есть та самая процедура.
int left = await Task.Factory.StartNew<int>(() => {return rnd.Next(1, 3);});
//Смещаем нашу кнопку
Car_1_btn.Left += left;
}
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question