मेरे पास इस कोड के साथ एक विंडोज़ सेवा प्रोजेक्ट है:

 protected override void OnStart(string[] args)       
 {  
      InitializeScheduler(); 
      var timer = new Timer {Interval = 10 * 60 * 1000};
      timer.Elapsed += (ss, ee) => InitializeScheduler();
      timer.Start(); 
 }
 private void InitializeScheduler()
 {
      _taskScheduler = new TaskScheduler() { Enabled = true };
      // do something
 }

टास्कशेड्यूलर वर्ग में:

private Timer _triggerTimer;
        public TaskScheduler()
        {            
            _triggerTimer = new Timer(1000);
            _triggerTimer.Elapsed += (TriggerTimerTick);
        }

जब मैं "InitializeScheduler ()" में "टास्कशेड्यूलर" का उदाहरण देता हूं, तो _triggerTimer डिस्पोज नहीं होता है और एक और टाइमर जोड़ता है। मैं इसका निपटान कैसे कर सकता हूं और InitializeScheduler () विधि में सभी चीजों को पुनरारंभ कर सकता हूं?

0
Sina Razavi 20 अक्टूबर 2018, 10:33

1 उत्तर

सबसे बढ़िया उत्तर

नया टाइमर बनाने से पहले टाइमर को डिस्पोज करने का प्रयास करें।

private void InitializeScheduler()
{
if( _taskScheduler != null)
    _taskScheduler.Dispose();

     _taskScheduler = new TaskScheduler() { Enabled = true };
    // do something
 }

टास्क शेड्यूलर वर्ग:

private Timer _triggerTimer;
public TaskScheduler()
{            
    _triggerTimer = new Timer(1000);
    _triggerTimer.Elapsed += (TriggerTimerTick);
}

public Dispose()
{
   if(_triggerTimer != null){
       _triggerTimer.Dispose()
       _triggerTimer = null;
}
0
KernelMode 20 अक्टूबर 2018, 07:46