4 Stimmen

DispatcherTimer mit Windows-Dienst verwenden

Warum funktioniert mein DispatcherTimer nicht mit Windows Service .

Der Zweck hinter, dass ich DispatcherTimer für die Überprüfung einer Windows-Dienst-Lizenz verwenden möchten

    public OIMService()
    {
        InitializeComponent();
        _dispatcherTimer = new DispatcherTimer();
        if (!System.Diagnostics.EventLog.SourceExists("OIM_Log"))
        {
            EventLog.CreateEventSource("OIM_Log", "OIMLog");
        }
        EventLog.Source = "OIM_Log";
        EventLog.Log = "OIMLog";
        _helpers = new ValidationHelpers();
        StartTimer();

    }

protected override void OnStart(string[] args)
{
    System.Diagnostics.Debugger.Launch();

    if (_helpers.IsValid())
    {
        ConfigureServer();
        StartTimer();
    }
    else
    {
        this.Stop();
    }

}

 private void StartTimer()
        {
            const int time = 10;
            _dispatcherTimer.Tick += new EventHandler(DispatcherTimerTick);
            _dispatcherTimer.Interval = new TimeSpan(0, 0, Convert.ToInt32(time));
            _dispatcherTimer.IsEnabled = true;
            _dispatcherTimer.Start();
        }
    private void DispatcherTimerTick(object sender, EventArgs e)
    {

        EventLog.WriteEntry("test test test ...");
    }

10voto

Jon Skeet Punkte 1325502

Der Punkt der DispatcherTimer ist das Abfeuern seiner Tick Ereignis auf dem Dispatcher-Thread. Das ist wichtig, weil Sie Silverlight/WPF UI-Elemente nur auf dem Dispatcher-Thread manipulieren können. In einem Windows-Dienst gibt es es kein Dispatcher-Thread... es gibt keine UI zum Manipulieren. Warum sollten Sie einen DispatcherTimer anstelle von (sagen wir) System.Timers.Timer ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X