其他线程c#上的System.Windows.Forms.Timer

时间:2018-03-01 08:27:45

标签: c# wpf multithreading timer

我正在创建一个程序,每当它收到消息" 000000000"时,它将绘制graph.i尝试使用Timer。我在Form_Load事件中启动Timer。当它收到消息" 0000000"(在其他线程中)时,我启用定时器:timer1.Enabled = true; 。它工作但它总是绘制和重绘图形,永远不会停止,我尝试在第一次完成绘图后禁用计时器。但是当我禁用计时器:timer1.Enabled = false;时,它第一次绘制,然后我收到" 0000000"消息多一次(),它不再绘制了。我希望它只有一次收到" 0000000"信息。请帮我。这是我的代码。

private void Form1_Load(object sender, EventArgs e)
{
    timer1.Start();
}

我在Form_Load上启动计时器。

if (cnvertMsg == "0000000000000000" || cnvertMsg == "00000000")
{
    timer1.Enabled = true;
    isStart = true;
}

当消息" 00000000"收到,我启用计时器。此代码不在GUI线程中。

private void timer1_Tick(object sender, EventArgs e)
{
    if (isStart && !backgroundWorker1.IsBusy)
    {
        if (!ps.ComPort.IsOpen) 
        {
            isStart = false;
            MessageBox.Show("device is disconnected!"); 
            return; 
        }
        if (String.IsNullOrEmpty(FormSettings.openFileName))
        {
            isStart = false;
            MessageBox.Show("pls chose your file by clicking tool!");
            return;
        }
        if (String.IsNullOrEmpty(FormSettings.saveFileName))
        {
            isStart = false;
            MessageBox.Show("pls chose where to save results ly clicking tool!");
            return;
        }

        try
        {
            listView1.Items.Clear();
            clearGraph();
            OnStop = false;
            Ontest = true;
            progressBar1.Maximum = ps.Step;
            progressBar1.Value = progressBar1.Minimum;

            backgroundWorker1.RunWorkerAsync();
            btnTest.Enabled = false;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
            timer1.Enabled = false;
        }

        isStart = false;
        timer1.Enabled = false;

    }
}

这是timer_tick事件。

0 个答案:

没有答案