У меня есть пользовательский элемент управления со следующим кодом:
private Thread updateProgress;
private void FileUploadingScreen_Load(object sender, EventArgs e)
{
updateProgress = new Thread(UpdateProgressBar);
updateProgress.Start();
}
private bool run = true;
private void UpdateProgressBar()
{
while (run)
{
Thread.Sleep(100);
if(run)
{
progressBar1.Invoke(new Action(() =>
{
if (progressBar1.Value >= 100)
{
progressBar1.Value = 1;
progressBar1.Step = 1;
}
progressBar1.PerformStep();
}));
}
}
}
public void StopProgressBar()
{
run = false;
}
в родительской форме у меня есть:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
userControl.StopProgressBar();
}
когда я закрываю форму нажатием X, в строке progressBar1.Invoke
появляется следующая ошибка.
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
Я думал, что установка run в false в событии form_closing
остановит это. Как я могу это исправить? Моя главная цель - иметь прогресс-бар, который продолжает двигаться, чтобы показать, что что-то происходит все еще. Есть ли лучший способ сделать это?