Я использую следующий код, чтобы попытаться показать окно wpf в отдельном потоке, чтобы анимированный gif на нем работал, в то время как поток пользовательского интерфейса главного окна работает с данными:
private Thread tBusy;
private void ShowBusyWindow(string message, double top, double left, double height, double width)
{
BusySplash busyForm = new BusySplash(message, top, left, height, width)
busyForm.Show();
}
private void ShowBusy(string message, UIElement container)
{
if (busy != null) return;
double top = container.PointToScreen(new Point(0, 0)).Y;
double left = container.PointToScreen(new Point(0, 0)).X;
double width = container.RenderSize.Width;
double height = container.RenderSize.Height;
ThreadStart ts = new ThreadStart(() => ShowBusyWindow(message, top, left, height, width));
tBusy = new Thread(ts);
tBusy.SetApartmentState(ApartmentState.STA);
tBusy.IsBackground = true;
tBusy.Start();
}
private void HideBusy()
{
tBusy.Abort();
tBusy = null;
}
Я окружаю код, выполняя работу с функцией ShowBusy () в начале и HideBusy () в конце.
Но, к сожалению, ShowBusy () запускается один раз успешно, а затем выдает:
System.InvalidOperationException: 'Вызывающий поток не может получить доступ к этому объекту, поскольку он принадлежит другому потоку.'
Что я могу сделать, чтобы предотвратить эту ошибку? Я попытался выполнить busyForm.Show()
с помощью диспетчера busyForm, но получил ту же ошибку.