Laden...

DispatcherTimer in Backgroundworker starten

Erstellt von fanti vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.363 Views
F
fanti Themenstarter:in
34 Beiträge seit 2012
vor 9 Jahren
DispatcherTimer in Backgroundworker starten

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");
        }


849 Beiträge seit 2006
vor 9 Jahren

Hallo,

der DispatcherTimer läuft im Gui Thread. Soweit ich weis, muss er auch da erstellt werden. Sonst feuert er nicht.