2014-10-30 38 views
0

暂停一个BackgroundWorker我有一个程序,被连续地运行。从另一个方法

当我启动该程序,我有一个BackgroundWorker(InitialStart.cs):

BackgroundWorker recordingSyncWorker = new BackgroundWorker(); 
    recordingSyncWorker.DoWork += new DoWorkEventHandler(RecordingSyncCheck); 
    recordingSyncWorker.WorkerSupportsCancellation = false; 
    recordingSyncWorker.WorkerReportsProgress = false; 
    recordingSyncWorker.RunWorkerAsync(); 

    void RecordingSyncCheck(object sender, DoWorkEventArgs e) 
    { 
     cHandler ch = new cHandler(); 
     Timer theTimer; 
     int seconds = 1; 
     if (taskSeconds != null && taskSeconds != "") 
      seconds = Convert.ToInt32(taskSeconds); 
     int milliseconds = seconds * 1000; 
     theTimer = new Timer(10000); 
     theTimer.Elapsed += new ElapsedEventHandler(ch.SyncMethod); 
     theTimer.Interval = milliseconds; 
     theTimer.Enabled = true; 
    } 

而且我有两种方法在另一个类(cHandler.cs):

SyncMethod(object source, System.Timers.ElapsedEventArgs e) 
    { 
     // random code 
    } 
    private string SDCardCheck(object whatever) 
    { 
     //more code 
    } 

SDCardCheck得到称为通过WCF,所以它就像运行cHandler.cs的另一个实例。当我打电话给SDCardCheck时,有没有办法让我暂停BackgroundWorker?

回答

3

不要使用一个BackgroundWorker刚刚启动一个定时器。启动计时器不是一个长时间运行的操作;它可以直接从UI线程完成。

你的另一种方法可以禁止定时器要停止启动它,然后重新启用它,使它能够继续点火,以有效地暂停其执行。

+0

值得注意的是,要做到这一点,在'Timer'需要已经不仅仅是方法的范围较广。 – 2014-10-30 16:49:40

+0

我禁用了BackgroundWorker的,刚跑了,直接从UI线程。初始测试看起来不错。我认为BackgroundWorker是以前版本的补充,因为Syncing方法更加流畅。 – javisrk 2014-10-30 18:57:55