WPF / c #: как решить проблему с нитями при использовании SplashScreen / экрана загрузки - PullRequest
0 голосов
/ 06 января 2019

Из-за того, что некоторые из окон моей страницы загружаются с большим количеством вычислений, прежде чем они показываются, поэтому я создал окно 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()));
        }
    }
}

Нет проблем, когда я "First Times" вызываю экран загрузки, но у меня будет ошибка, когда я "Second Times" вызову экран загрузки, и ошибка в следующем:

Вызывающий поток не может получить доступ к этому объекту, поскольку он принадлежит другому потоку.

Может ли кто-нибудь помочь мне понять, как решить эту проблему? Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...