在 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
我编写了有关使用静态布尔值的设置页面的代码 然后我需要检查 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