Я создаю своего рода «экран загрузки», который будет отображаться из библиотеки классов непосредственно перед тяжелой обработкой, а затем он скроется, когда обработка будет завершена. Моя проблема в том, что что бы я ни делал, тяжелая обработка, похоже, блокирует поток пользовательского интерфейса. Мне пришлось установить методы с атрибутом [STAThread]
, чтобы окно действительно создавалось. Затем я показываю окно, используя:
bw = new BusyWindow();
bw.Show();
А затем просто скрываю его, используя bw. Hide ()
после завершения обработки. Я создал задачу для обработки, поэтому она должна выполняться в отдельном потоке ..? Если, конечно, STAThread полностью его не испортит?
Еще код:
var taskStart = Task.Factory.StartNew(() => ShowBusyWindow());
var taskProcess = taskStart.ContinueWith((antecedent) => GetInternal());
var taskEnd = taskProcess.ContinueWith((antecedent) => HideBusyWindow());
return taskProcess.Result;
И ShowBusywindow
public void ShowBusyWindow()
{
bw = new BusyWindow();
bw.Show();
}
И HideBusyWindow:
public void HideBusyWindow()
{
bw.Close();
}
Я также должен упомянуть, что я пытаюсь открыть эту библиотеку для COM, поэтому он может быть запущен из некоторого кода VB6. Не знаю, влияет ли это на что-нибудь ...?