Из-за того, что некоторые из окон моей страницы загружаются с большим количеством вычислений, прежде чем они показываются, поэтому я создал окно 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" вызову экран загрузки, и ошибка в следующем:
Вызывающий поток не может получить доступ к этому объекту, поскольку он принадлежит другому потоку.
Может ли кто-нибудь помочь мне понять, как решить эту проблему?
Большое спасибо!