Hallo,
ich möchte einen DispatcherTimer in einem Backgroundworker starten. Habe aber das Problem, dass mein Timer Eventhandler nicht angesprungen wird. Da ich den Fehler nicht finde, wollte ich fragen ob meine Vorgehensweise grundsätzlich funktionieren sollte?
Ein "normaler" Timer (System.Timers.Timer) funktioniert porblemlos.
Hintergrund des ganzen ist, dass ich im Backgroundworker eine synchrone DLL Funktion aufrufe und mit dem Timer den Status in der GUI darstellen will.
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bwRunTests);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwRunTestsCompleted);
bw.WorkerSupportsCancellation = true;
private void btnStart_Click(object sender, RoutedEventArgs e)
{
if (bw.IsBusy)
{
bw.CancelAsync();
}
else
{
btnStart.Content = Properties.Resources.MainStop;
bw.RunWorkerAsync();
}
}
private void bwRunTestsCompleted(object sender, RunWorkerCompletedEventArgs e)
{
btnStart.Content = Properties.Resources.MainStart;
}
private void bwRunTests(object sender, DoWorkEventArgs e)
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(20);
timer.Tick += new EventHandler(timerTick);
timer.Start();
System.Threading.Thread.Sleep(7000);
timer.Stop();
}
void timerTick(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(10);
MessageBox.Show("bla");
}
Hallo,
der DispatcherTimer läuft im Gui Thread. Soweit ich weis, muss er auch da erstellt werden. Sonst feuert er nicht.