InvokeRequired 复选框

InvokeRequired to checkbox

我只需要为复选框创建一个函数,它将 return 复选框的当前值。

我写道:

private void Checkbox_check()
        {
            if (checkBox1.InvokeRequired)
                return (int)checkBox1.Invoke(new Func<int>(checked));
            else
                return checkBox1.Checked; // bad here i know

        }

这里有什么问题,有人可以正确地编写这个函数吗?我需要调用,因为如果不调用就不能在另一个线程中使用。我只是搜索有关帮助的论坛和网络,但无法在任何地方找到解决方案。

你应该这样写:

private void Checkbox_check()
    {
        if (checkBox1.Invoke:DRequired)
            return (int)checkBox1.Invoke(new Func<int>(checked));
        else
            return checkBox1.Checked.(initInvoke); 
    }

不要使用 Func<>,因为它不会 return 任何东西。请改用 Action

private void Checkbox_check()
{
    if (checkBox1.InvokeRequired)
        checkBox1.Invoke(new Action(Checkbox_check));
    else
    {
        // do what you like to do on the ui context
        //  checkBox1.Checked; // bad here i know, yep...
    }
}

从另一个线程获取选中状态,你可以这样做:

private bool Checkbox_check()
{
    // result value.
    bool result = false;

    // define a function which assigns the checkbox checked state to the result
    var checkCheckBox = new Action(() => result = checkBox1.Checked);

    // check if it should be invoked.      
    if (checkBox1.InvokeRequired)
        checkBox1.Invoke(checkCheckBox);
    else
        checkCheckBox();

    // return the result.
    return result;
}

我不建议这样做,这可能会导致死锁等。我建议您在线程启动时传递检查的值,这样您就不必进行任何跨线程调用。