Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# 当我关闭启动屏幕时,WPF应用程序关闭_C#_Wpf_Multithreading_Splash Screen - Fatal编程技术网

C# 当我关闭启动屏幕时,WPF应用程序关闭

C# 当我关闭启动屏幕时,WPF应用程序关闭,c#,wpf,multithreading,splash-screen,C#,Wpf,Multithreading,Splash Screen,我想在一个新线程中为我的WPF应用程序添加一个启动屏幕(因为在加载主窗口的数据时,我的动画启动屏幕会挂起)。代码: 我的问题是,当我关闭启动屏幕时,程序会关闭。因为.Show()不是阻塞调用,这意味着它将返回到实际关闭的窗口,因此应用程序很可能会一直运行到最后 使用.ShowDialog() 在调用此函数之前,请确保关闭启动屏幕。因为.Show()不是阻塞调用,这意味着它将返回到实际关闭的窗口,因此应用程序很可能会一直运行到最后 使用.ShowDialog() 在调用此命令之前,请确保关闭启动屏

我想在一个新线程中为我的WPF应用程序添加一个启动屏幕(因为在加载主窗口的数据时,我的动画启动屏幕会挂起)。代码:

我的问题是,当我关闭启动屏幕时,程序会关闭。

因为
.Show()
不是阻塞调用,这意味着它将返回到实际关闭的窗口,因此应用程序很可能会一直运行到最后

使用
.ShowDialog()

在调用此函数之前,请确保关闭启动屏幕。

因为
.Show()
不是阻塞调用,这意味着它将返回到实际关闭的窗口,因此应用程序很可能会一直运行到最后

使用
.ShowDialog()


在调用此命令之前,请确保关闭启动屏幕。

我也做过类似的操作,这对我很有用

SplashScreenWindow splashScreenWindow = null;
Thread newWindowThread = new Thread(() =>
{
    splashScreenWindow = new SplashScreenWindow();
    splashScreenWindow.Show();
    System.Windows.Threading.Dispatcher.Run();
});
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();

data loading...

_mainWindow.Show();
如果调用关闭太早,请从主窗口加载事件调用splashScreenWindow.close()

_mainWindow.Loaded += (s,ev) => { 
splashScreenWindow.Dispatcher.Invoke(new Action(.splashScreenWindow.Close));
};

我也做过类似的事情,这对我很有用

SplashScreenWindow splashScreenWindow = null;
Thread newWindowThread = new Thread(() =>
{
    splashScreenWindow = new SplashScreenWindow();
    splashScreenWindow.Show();
    System.Windows.Threading.Dispatcher.Run();
});
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();

data loading...

_mainWindow.Show();
如果调用关闭太早,请从主窗口加载事件调用splashScreenWindow.close()

_mainWindow.Loaded += (s,ev) => { 
splashScreenWindow.Dispatcher.Invoke(new Action(.splashScreenWindow.Close));
};

你知道你可以把一个图像添加到你的项目中,把它的构建动作设置为“闪屏”,框架会帮你解决这个问题,对吧?我的闪屏不是图像。这是一个有动画的窗口。你知道你可以在你的项目中添加一个图像,将它的构建操作设置为“启动屏幕”,框架会为你解决这个问题,对吗?我的启动屏幕不是一个图像。这是一个有动画的窗口。我已将代码更改为:_splashScreenWindow.Close()_mainWindow.ShowDialog();但这对我没有帮助。在代码之外还有其他东西正在关闭你的应用程序。调用
.ShowDialog()
时,应等待窗口关闭。您确定不在其他地方终止吗?我已将代码更改为:_splashScreenWindow.Close()_mainWindow.ShowDialog();但这对我没有帮助。在代码之外还有其他东西正在关闭你的应用程序。调用
.ShowDialog()
时,应等待窗口关闭。确实没有在其他位置终止吗?下一行
\u mainWindow.Loaded+=(s,ev)=>{splashScreenWindow.Close();}
引发异常:
System.InvalidOperationException。调用线程无法访问此对象,因为其他线程拥有它
我已将该行更改为
\u mainWindow.Loaded+=(s,ev)=>{Dispatcher.Invoke(()=>\u splashScreenWindow.Close());},但它也不起作用。我只是编辑以添加dispatcher修复程序。我所做的另一件不同的事情是,我的主窗口是通过App.xaml StartupUri注册的,我没有调用mainWindow.Show()splashscreenWindow.close是从窗口加载的事件处理程序调用的。下一行
\u mainWindow.Loaded+=(s,ev)=>{splashscreenWindow.close()}
引发异常:
System.InvalidOperationException。调用线程无法访问此对象,因为其他线程拥有它
我已将该行更改为
\u mainWindow.Loaded+=(s,ev)=>{Dispatcher.Invoke(()=>\u splashScreenWindow.Close());},但它也不起作用。我只是编辑以添加dispatcher修复程序。我所做的另一件不同的事情是,我的主窗口是通过App.xaml StartupUri注册的,我没有调用mainWindow.Show(),splashscreenWindow.close是从窗口加载的事件处理程序调用的。