C#如何正确控制另一个线程的复选框?

时间:2016-11-15 11:56:30

标签: c# .net multithreading checkbox

我试图在计时器停止后取消选中复选框。但不知何故,我在这部分OnTimedEvent中的checkBox1.Checked = false;方法收到错误:

  

跨线程操作无效:控制' checkBox1'从a访问   除了创建它的线程以外的线程。

我的部分代码是:

namespace WindowsFormsApplication1
{

public partial class Form1 : Form
{
    System.Timers.Timer timeris = new System.Timers.Timer();
    int test = 0;

    public Form1()
    { 
        InitializeComponent();
    }

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    comboBox1.Enabled = (checkBox1.CheckState == CheckState.Checked);

    if (comboBox1.Enabled)
    {
        button1.Enabled = false;
    }
    else
    {
        button1.Enabled = true;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    if (comboBox1.Enabled)
    {
        if (comboBox1.SelectedIndex < 0)
        {
            comboBox1.Text = "Select from list";
        }
        else
        {
            this.Hide();
            timeris.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            timeris.Interval = Convert.ToInt32(test);
            timeris.Start();
        }
    }
    else
    {            
        this.Close();
    }
}

private void OnTimedEvent(object sender, EventArgs e)
{
    timeris.Stop();
    if (checkBox1.Checked == true)
    {
        checkBox1.Checked = false; // there I receive an error
    }
    this.Show();
}
}

你有什么想法我怎么解决它?如果我构建应用程序并启动.exe文件它看起来像是成功运行,但我在调试时遇到错误。

0 个答案:

没有答案