У меня есть настраиваемая форма с настраиваемой полосой выполнения, созданная в основном классе (основном потоке). Затем я создаю поток и отправляю ему функцию ThreadStart. Эта функция запуска потока должна обновлять индикатор выполнения в настраиваемом элементе управления, но не обновляет:
class MyClass
{
......
//Custom form with progress bar
public CustomFormWithProgressBar statusScreen = new CustomFormWithProgressBar(0);
//thread to use
private Thread myThread;
.....
//Linked to a button to trigger the update procedure.
void ButtonPressEvent(.......)
{
//create a sub thread to run the work and handle the UI updates to the progress bar
myThread = new Thread(new ThreadStart(ThreadFunction));
myThread.Start();
}
.....
//The function that gets called when the thread runs
public void ThreadFunction()
{
//MyThreadClass myThreadClassObject = new MyThreadClass(this);
//myThreadClassObject.Run();
statusScreen.ShowStatusScreen();
for (int i = 0; i < 100; i++ )
{
statusScreen .SetProgressPercentage(i);
Thread.Sleep(20);
}
statusScreen.CloseStatusScreen();
}
Теперь моя форма statusScreen просто сидит и ничего не делает. Обновлений не происходит. Но я подтвердил, что подпоток действительно создан, и пока я нахожусь в ThreadFunction, я запускаю новый поток. Определял это через окно Thread в Visual Studio.
Почему мои обновления процента выполнения на экране состояния не отображаются? Как я могу получить обновления, чтобы добавить новые значения на экран прогресса и показать его в реальном времени?
Обратите внимание, что целочисленные значения, отправляемые в функции экрана состояния, представляют собой процент выполнения. Thread.Sleep просто позволяет увидеть обновления, если / когда они произойдут.
Обратите внимание, что это не проблема повторного рисования. я вызываю Invalidate, когда процент выполнения передается в настраиваемый индикатор выполнения