WPF / c#:如何在使用SplashScreen /加载屏幕时解决线程问题

时间:2019-01-05 21:16:04

标签: c# wpf

由于我的某些页面窗口将在显示之前加载大量计算,因此我创建了WPF窗口并使其成为带有GIF的加载屏幕,以在呈现页面之前显示。

当我想显示加载屏幕时,我使用以下代码:

  

Loading.ShowSplashScreen();

页面加载后,我将使用下面的代码关闭加载屏幕

  

Loading.CloseForm();

加载页面后面的代码如下:

public partial class Loading : Window
{
    private static Loading LD;
    public static Dictionary<string, object> Dic = new Dictionary<string, object>();

    public Loading()
    {
        InitializeComponent();
    }

    static public void ShowSplashScreen()
    {
        Thread t = new Thread(() =>
        {
            Loading sw = new Loading();
            Dic["Loading"] = sw;
                sw.ShowDialog();
            });
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
    }

    static public void CloseForm()
    {
        if (Loading.Dic.ContainsKey("Loading"))
        {
            Loading sw = Loading.Dic["Loading"] as Loading;
            sw.Dispatcher.Invoke((Action)(() => sw.Close()));
        }
    }
}

当我“第一次”调出加载屏幕时没问题,但是一旦我“第二次”调出加载屏幕时出现以下错误:

  

由于另一个线程拥有该对象,因此调用线程无法访问该对象。

任何人都可以帮助我看看如何解决此问题吗? 非常感谢!

0 个答案:

没有答案