Включить System.Form.Timer из Backgroundworker - PullRequest
0 голосов
/ 30 марта 2012

Друзья, у меня есть эта проблема, надеюсь, какое-нибудь тело поможет мне, У меня есть событие Timer.Tick и событие Backgroundworker_dowork, что я хотел сделать, это включить событие отметки времени от фонового работника, кто-нибудь может сказать мне, как это сделать? Закрытое 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();


        }
    }

этот вызов метода от фонового работника, фонового работника, вызываемого из события отметки таймера каждую секунду, но здесь я не могу включить timer3 от backgroundworker3

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Я не совсем уверен, что это правильный ответ, но попробуйте включить таймер в главной форме, а не от фонового работника.

Попробуйте:

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

Или

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

(PS Обе строки делают то же самое)

1 голос
/ 30 марта 2012

Возможно, этот код поможет вам

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)
{

}
...