Adamszsz
Adamszsz

Reputation: 581

InvokeRequired to checkbox

I just need to create a function to checkbox that will return the current value of checkbox.

I wrote :

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

        }

What is bad here, can someone just write correctly this function? I need Invoke because can't use in another Thread without invoke. I just search a forum and web about help but can't find solution anywhere.

Upvotes: 0

Views: 1121

Answers (2)

Jeroen van Langen
Jeroen van Langen

Reputation: 22073

Don't use Func<> as it doesn't return anything. Use Action instead.

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...
    }
}

Getting the checked state from another thread, you could do like this:

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;
}

I would not advise this, this could lead to deadlocks etc. I advise you to pass the checked value on the threadstart, so you don't have to do any crossthread calls.

Upvotes: 0

sam
sam

Reputation: 1

You should write it this way:

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

Upvotes: -1

Related Questions