在 public static bool 中调用异步

Call async inside public static bool

我编写了有关使用静态布尔值的设置页面的代码 然后我需要检查 public static bool 是否以我需要调用的形式更改 (Form1 是主窗体,可以打开一次,但 Form2 可以打开 >1) 然后我写了这段代码

表格 1:

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

然后它说你不能运行 non-static inside static 所以我有一个想法,如果我可以检查 public static bool 然后调用非静态的 async void。 有什么想法吗?

好吧,static 意味着 不是实例 ,所以你有 一个且只有一个 Called所有 Form1 个实例。 当您尝试在 static 属性 set 中调用 Update() 时,编译器会抱怨:它不知道 哪个 实例应该被调用(想象一下,有 three 打开 Form1)。

您可以添加一些逻辑,例如在所有打开的 Form1:

上调用 Update
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(); 
        }
    }
}

或者您可以让每个 Form1 实例都有自己的 Called,即删除 static:

private bool Called = false;

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

            Update(); 
        }
    }
}

请注意,async is quite a different conseption which is orthogonal to static