Если вам не нужен фоновый работник, вам нужно скорректировать код, чтобы выполнить длинную задачу в новом потоке.
using System;
using System.Threading;
using System.Windows;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Thread t = new Thread(DoSomeLongTask);
t.Start();
// switch this with the DoSomeLongTask, so the long task is
// on the new thread and the UI thread is free.
ShowLoadingWindow();
}
}
}
Если вы хотите затем обновить индикатор выполнения из вашего метода «DoSomeLongTask», то вам нужно убедиться, что вы вызываете invoke. Например:
delegate void ProgressDelegate(int Progress);
private void UpdateProgress( int Progress)
{
if (!progressBar1.Dispatcher.CheckAccess())
{
progressBar1.Value = Progress;
}
else
{
ProgressDelegate progressD = new ProgressDelegate(UpdateProgress);
progressBar1.Dispatcher.Invoke(progressD, new object[] { Progress });
}
}