Enable System.Form.Timer from Backgroundworker

本文关键字:from Backgroundworker Timer Form System Enable | 更新日期: 2023-09-27 18:29:34

朋友们我有这个问题,希望有人能帮助我,我有Timer.Tick事件和Backgroundworker_dowork事件,我想做的是从后台工作人员启用定时器Tick事件,有人能告诉我怎么做吗?private void ManualController(){

        if (TabControl1.SelectedTab == tabPage1 && Globs.DeltaP != 0)
        {
            if (checkBox6.Checked == true && Globs.DeltaP > 0)
            {
                do
                {
                    Globs.voltage += 0.1;
                    data_logger.WriteString("SOURce:VOLTage" + " " + (Globs.voltage.ToString().Replace(",", ".")) + ",(@104)", true);
                }
                while (Globs.DeltaP == Globs.tolerance);

            }
            if (checkBox6.Checked == true && Globs.DeltaP < 0)
            {
                do
                {
                    Globs.voltage -= 0.1;
                    data_logger.WriteString("SOURce:VOLTage" + " " + (Globs.voltage.ToString().Replace(",", ".")) + ",(@104)", true);
                }
                while (Globs.DeltaP == (-1) * Globs.tolerance);

            }
            timer3.Enabled = true;
            //  timer4.Start();

        }
    }

这个方法是从后台工作程序调用的,后台工作程序每秒从计时器tick事件调用一次,但在这里我无法从后台工作人员3 启用timer3

Enable System.Form.Timer from Backgroundworker

我不确定这是否是正确的答案,但请尝试在主窗体上启用计时器,而不是从后台工作人员启用计时器。

尝试:

 this.Invoke((MethodInvoker)(() => { timer3.Enabled = true; }));

 this.Invoke((MethodInvoker)delegate() { timer3.Enabled = true; });

(附言:两行操作相同)

也许这段代码可以帮助您

public Form1()
{
    InitializeComponent();
    BackgroundWorker worker = new BackgroundWorker();
    // init worker
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
    Timer timer = new Timer();
    // init worker
    timer.Tick += new EventHandler(timer_Tick);
}
void timer_Tick(object sender, EventArgs e)
{
}