C# 如何访问线程内Usercontrol的属性(公共静态void)

C# 如何访问线程内Usercontrol的属性(公共静态void),c#,wpf,C#,Wpf,如何修复此错误: 错误:关键字“this”在静态属性、静态方法或静态字段初始值设定项中无效 以下是故障代码: private void proxietype\u SelectionChanged(对象发送方,selectionchangedventargs e) { Dispatcher.BeginInvoke((操作)委托 { 线程t=新线程(新线程开始(()=>检查()); t、 Start(); })); } 公共静态无效检查() { ((UserControlVPN)Window.Get

如何修复此错误:

错误:关键字“this”在静态属性、静态方法或静态字段初始值设定项中无效

以下是故障代码:

private void proxietype\u SelectionChanged(对象发送方,selectionchangedventargs e)
{
Dispatcher.BeginInvoke((操作)委托
{
线程t=新线程(新线程开始(()=>检查());
t、 Start();
}));
}
公共静态无效检查()
{
((UserControlVPN)Window.GetWindow(this)).notification.IsActive=true;
main.notification.IsActive=true;
main.notification.Message.Content=“请稍候”;
}
如图所示:

1)异步运行
线程
任务
不需要
调度程序

2) 使用
任务
而不是
线程

3) 您可以通过在构造函数中分配的静态字段访问实例

4) 此外,从主UI
线程
以外的其他位置访问
窗口
属性时,您可能会遇到异常。这里您需要一个
调度器

private void proxietype\u SelectionChanged(对象发送方,selectionchangedventargs e)
{
运行(()=>Check());
}
//定义静态场
私有静态用户控制VPN_此窗口;
公共用户控制VPN()
{
//将实例分配给构造函数中的字段
_thisWindow=(UserControlVPN)Window.GetWindow(this);
}
公共静态无效检查()
{
Dispatcher.BeginInvoke((操作)(=>
{
_thisWindow.notification.IsActive=true;
_thisWindow.notification.Message.Content=“请稍候”;
});
//...
}
或者您可以只删除
static
。因为使用此实现,您可能只有一个
UserControl
实例,而不会出现任何问题

5) 最好使用
async/await
方法并在
Task
之外修改窗口的属性

private async void proxietype\u SelectionChanged(对象发送方,selectionchangedventargs e)
{
proxietype.Enabled=false;
main.notification.IsActive=true;
main.notification.Message.Content=“请稍候”;
等待任务。运行(()=>Check());
main.notification.Message.Content=“”;
main.notification.IsActive=false;
proxietype.Enabled=true;
}
公共静态无效检查()
{
//做你的工作。。。
}
确保在
Check()

1)中没有未处理的异常。异步运行
线程或
任务不需要
调度程序

2) 使用
任务
而不是
线程

3) 您可以通过在构造函数中分配的静态字段访问实例

4) 此外,从主UI
线程
以外的其他位置访问
窗口
属性时,您可能会遇到异常。这里您需要一个
调度器

private void proxietype\u SelectionChanged(对象发送方,selectionchangedventargs e)
{
运行(()=>Check());
}
//定义静态场
私有静态用户控制VPN_此窗口;
公共用户控制VPN()
{
//将实例分配给构造函数中的字段
_thisWindow=(UserControlVPN)Window.GetWindow(this);
}
公共静态无效检查()
{
Dispatcher.BeginInvoke((操作)(=>
{
_thisWindow.notification.IsActive=true;
_thisWindow.notification.Message.Content=“请稍候”;
});
//...
}
或者您可以只删除
static
。因为使用此实现,您可能只有一个
UserControl
实例,而不会出现任何问题

5) 最好使用
async/await
方法并在
Task
之外修改窗口的属性

private async void proxietype\u SelectionChanged(对象发送方,selectionchangedventargs e)
{
proxietype.Enabled=false;
main.notification.IsActive=true;
main.notification.Message.Content=“请稍候”;
等待任务。运行(()=>Check());
main.notification.Message.Content=“”;
main.notification.IsActive=false;
proxietype.Enabled=true;
}
公共静态无效检查()
{
//做你的工作。。。
}

确保
Check()

中没有未处理的异常,为什么需要
Check()
是静态的?这是否回答了您的问题?为什么需要将
Check()
设置为静态?这是否回答了您的问题?