У меня есть приложение с индикатором выполнения и кнопкой.
При нажатии кнопки значение индикатора выполнения увеличивается, вот исходный код,
private void Run()
{
progressBar1.Maximum = 1000;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
for (int l_nIndex = 0; l_nIndex < 1000; l_nIndex++)
{
progressBar1.Value++;
Thread.Sleep(10);
}
}
private void button1_Click(object sender, EventArgs e)
{
Run();
}
поэтому, когда я запускаю приложение, значение индикатора выполнения увеличивается, но когда я пытаюсь переместить окно, оно не отвечает.
Я не могу запустить его обычным способом - он выдаст ошибку Cross-Thread.
поэтому я изменил код как,
private void Run()
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.Run));
}
else
{
progressBar1.Maximum = 1000;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
for (int l_nIndex = 0; l_nIndex < 1000; l_nIndex++)
{
progressBar1.Value++;
Thread.Sleep(10);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread myThread = new Thread(new ThreadStart( Run));
myThread.Start();
}
Теперь я могу перемещать окно, но когда я двигаюсь, индикатор выполнения останавливается, и когда я отпускаю кнопку мыши, его возобновление. Так что все еще выполнение в потоке пользовательского интерфейса.
Как справиться с этим лучше. Пожалуйста, помогите мне сделать это.