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