C# 创建窗口xaml时出现nullreferenceexception
我的WPF应用程序中有一个问题,它基本上有两个窗口,一个登录窗口和一个仪表板窗口,当我加载这些窗口时,会间歇性地出现空引用异常。典型的异常如下所示(dashbaord) 这是一个模糊的错误。深入loadcomponent类 我使用主AppContext类中的2个方法启动仪表板,如下所示C# 创建窗口xaml时出现nullreferenceexception,c#,.net,wpf,C#,.net,Wpf,我的WPF应用程序中有一个问题,它基本上有两个窗口,一个登录窗口和一个仪表板窗口,当我加载这些窗口时,会间歇性地出现空引用异常。典型的异常如下所示(dashbaord) 这是一个模糊的错误。深入loadcomponent类 我使用主AppContext类中的2个方法启动仪表板,如下所示 internal void SetupAndRunDashboard() { if (DashboardUiThread == null) {
internal void SetupAndRunDashboard()
{
if (DashboardUiThread == null)
{
DashboardUiThread = new Thread(RunDashboard) { Name = "dashboardUIThread" };
DashboardUiThread.SetApartmentState(ApartmentState.STA);
DashboardUiThread.Start();
}
}
private void RunDashboard()
{
UIDashBoard = new Dashboard(this);
Dispatcher.Run();
}
我的仪表板构造函数如下所示
public partial class Dashboard : Window
{
public Dashboard(BlitsMeClientAppContext appContext)
{
this.InitializeComponent();
......
}
}
private AutoResetEvent _dashboardStartWaitEvent = new AutoResetEvent(false);
internal void SetupAndRunDashboard()
{
if (DashboardUiThread == null)
{
DashboardUiThread = new Thread(RunDashboard) { Name = "dashboardUIThread" };
DashboardUiThread.SetApartmentState(ApartmentState.STA);
DashboardUiThread.Start();
_dashboardStartWaitEvent.Wait();
}
}
private void RunDashboard()
{
UIDashBoard = new Dashboard(this);
_dashboardStartWaitEvent.Set();
Dispatcher.Run();
}
我真的非常感谢您在这方面的帮助,因为在windows API的深处抛出了null ref,这让我很困惑。好的,所以我知道了发生了什么,尽管是在相当高的级别上,但似乎我无法同时启动2个ui。如我在问题中所述,我运行登录ui和仪表板ui,并以上述方式启动它们,即启动一个具有STA单元状态的线程,新线程然后是登录窗口类的new,并将其交给dispatcher。但是,在新线程启动之后,主线程将继续以相同的方式在仪表板窗口上开始工作,结果表明,该进程的某些部分不能与另一个线程同时运行。不知道为什么,但我就是这样解决的 基本上,启动ui的代码如下所示
public partial class Dashboard : Window
{
public Dashboard(BlitsMeClientAppContext appContext)
{
this.InitializeComponent();
......
}
}
private AutoResetEvent _dashboardStartWaitEvent = new AutoResetEvent(false);
internal void SetupAndRunDashboard()
{
if (DashboardUiThread == null)
{
DashboardUiThread = new Thread(RunDashboard) { Name = "dashboardUIThread" };
DashboardUiThread.SetApartmentState(ApartmentState.STA);
DashboardUiThread.Start();
_dashboardStartWaitEvent.Wait();
}
}
private void RunDashboard()
{
UIDashBoard = new Dashboard(this);
_dashboardStartWaitEvent.Set();
Dispatcher.Run();
}
因此,主线程会等待ui初始化,然后再继续,因此ui会一次初始化一个,而不会重叠,这就解决了问题。你的App.xaml是什么样子的?看起来它可能正在尝试加载一些嵌入式资源。如果您是指我的Dashboard.xaml,那么我没有App.xaml它在这里[您设置了DataContext吗?是的,在构造函数DataContext=new Dashboard DataContext()中设置了];能否显示
仪表板
构造函数的其余部分?异常是从仪表板.ctor
引发的,但不是在窗口中。InitializeComponent
。