我正在创建一种类似于“加载屏幕”的东西,将在类库中显示,在进行一些繁重的处理之前显示,然后在处理完成后隐藏。我的问题是,无论我做什么,繁重的处理似乎都会阻塞UI线程。我不得不设置带有
[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;
并显示繁忙窗口
public void ShowBusyWindow()
{
bw = new BusyWindow();
bw.Show();
}
并且隐藏繁忙窗口:
public void HideBusyWindow()
{
bw.Close();
}
我还应该提到,我正在尝试将这个库暴露给COM,以便可以从一些VB6代码中运行它。我不知道这是否会对任何事情产生影响...?