Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建窗口xaml时出现nullreferenceexception_C#_.net_Wpf - Fatal编程技术网

C# 创建窗口xaml时出现nullreferenceexception

C# 创建窗口xaml时出现nullreferenceexception,c#,.net,wpf,C#,.net,Wpf,我的WPF应用程序中有一个问题,它基本上有两个窗口,一个登录窗口和一个仪表板窗口,当我加载这些窗口时,会间歇性地出现空引用异常。典型的异常如下所示(dashbaord) 这是一个模糊的错误。深入loadcomponent类 我使用主AppContext类中的2个方法启动仪表板,如下所示 internal void SetupAndRunDashboard() { if (DashboardUiThread == null) {

我的WPF应用程序中有一个问题,它基本上有两个窗口,一个登录窗口和一个仪表板窗口,当我加载这些窗口时,会间歇性地出现空引用异常。典型的异常如下所示(dashbaord)

这是一个模糊的错误。深入loadcomponent类

我使用主AppContext类中的2个方法启动仪表板,如下所示

    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