if((testItem & FlagTest.Flag1) == FlagTest.Flag1)
{
...
}
Переместите работу в BackgroundWorker и используйте метод ReportProgress .
for (i = 0; i < count; i++)
{
... do analysis ...
worker.ReportProgress((100 * i) / count);
}
private void MyWorker_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
taskProgressBar.Value = Math.Min(e.ProgressPercentage, 100);
}
//Create a Delegate to update your status button
delegate void StringParameterDelegate(string value);
String countLabel = "/" + count.ToString();
//When your button is clicked to process the loops, start a thread for process the loops
public void StartProcessingButtonClick(object sender, EventArgs e)
{
Thread queryRunningThread = new Thread(new ThreadStart(ProcessLoop));
queryRunningThread.Name = "ProcessLoop";
queryRunningThread.IsBackground = true;
queryRunningThread.Start();
}
private void ProcessLoop()
{
for (i = 0; i < count; i++)
{
... do analysis ...
UpdateProgressLabel("Step "+i.ToString()+countLabel);
}
}
void UpdateProgressLabel(string value)
{
if (InvokeRequired)
{
// We're not in the UI thread, so we need to call BeginInvoke
BeginInvoke(new StringParameterDelegate(UpdateProgressLabel), new object[] { value });
return;
}
// Must be on the UI thread if we've got this far
labelProgress.Content = value;
}
Пользовательский интерфейс не обновляется из-за того, что ваш текущий поток имеет более высокий приоритет, чем ваш поток пользовательского интерфейса, который в конечном итоге установит метку;). Так что, пока ваш поток не завершит работу с вашими материалами, он будет обновлять вашу метку в конце.
К счастью для нас, в каждом элементе управления WPF есть свойство Dispatcher, которое позволяет запускать новый поток с другим приоритетом ..
labelProgress.Dispatcher.Invoke(DispatcherPriority.Background,
() => labelProgress.Content = string.Format("Step {0}{1}", i, countLabel));
Это запустит поток в фоновом режиме и выполнит свою работу! Вы также можете попробовать другие параметры DispatcherPriority
PS Я также позволил себе добавить анонимный метод и несколько поправить синтаксический анализ вашей строки ... надеюсь, вы не против ..