user19114315
user19114315

Reputation:

Call async inside public static bool

I wrote code about the settings page that uses static bool then I need to Check If the public static bool changed or not In the form that I needed to call (Form1 Is main form and Can be opened Once But Form2 Can open >1) then I wrote this code

Form1:

    private static bool Called = false;

    public static bool HideButton
    {
        get { return Called; }
        set
        {
            if (Called != value)
            {
                Called = value;
                Update(); //function about updating buttons
            }
        }
    }

Form2:

private void checkBox5_CheckedChanged(object sender, EventArgs e) { 
    if (checkBox5.Checked) 
    { 
        Form1.HideButton = true; 
    } 
    else 
    { 
        Form1.HideButton = false; 
    } 
}

Then it said that you can't run non-static inside static So I have an idea If I can check public static bool then call async void that is not static. any idea?

Upvotes: 0

Views: 326

Answers (1)

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186833

Well, static means not instance, so you have one and only one Called value for all Form1 instances. When you try to call Update() within static property set, the compiler complains: it doesn't know on which instance should it be called (imagine, that there are three opened Form1).

You can either add some logic, e.g. let call Update on all opened Form1:

using System.Linq;

...

private static bool Called = false;

public static bool HideButton
{
    get { return Called; }
    set
    {
        if (Called != value)
        {
            Called = value;

            // Assuming WinForms  
            // We call Update on all opened Form1 forms
            foreach (var form in Application.OpenForms.OfType<Form1>())
                form.Update(); 
        }
    }
}

Or you may let each Form1 instance have its own Called, i.e. drop static:

private bool Called = false;

public bool HideButton
{
    get { return Called; }
    set
    {
        if (Called != value)
        {
            Called = value;

            Update(); 
        }
    }
}

Please, note, that async is quite a different conseption which is orthogonal to static

Upvotes: 1

Related Questions