【发布时间】:2016-02-09 13:29:34
【问题描述】:
在下面的代码中,我调用了打开自定义新窗口的方法。但是,当应用程序正在执行一些长时间运行的任务时,我希望仍然能够激活窗口。是否可以在另一个线程上或使用Task 类来执行此操作?
public static class CustomW
{
static Custom_Window_Chrome_Demo.ThemedWindow MsgBox(string Msgbx_TTL, string Msgbx_Contnt)
{
var w_mbx = new Custom_Window_Chrome_Demo.ThemedWindow();
w_mbx.Width = 950; w_mbx.Height = 159;
w_mbx.Title = Msgbx_TTL;
Grid g = new Grid();
StackPanel spM = new StackPanel();
TextBlock TblckErrMsg = new TextBlock();
//more settings......
}
}
这就是我尝试调用它的方式,
public void newMsgBoxShow(string Msgbx_TTL, string Msgbx_Contnt)
{
System.Threading.Thread s = new System.Threading.Thread(
()=>
CustomW.MsgBox(Msgbx_TTL, Msgbx_Contnt).Show()
);
}
但是当我使用新线程时,我收到以下错误。
调用线程必须是STA,因为很多UI组件都需要这个
达到所需结果的正确方法是什么?
【问题讨论】:
-
长时间运行的任务在哪里?
-
嗯,你应该在另一个线程上运行你的长任务,主线程留给 UI 和非繁重的东西。
-
@NicoSchertler 长任务是搜索数据库长代码..
-
按照建议,您应该在另一个线程上执行长时间运行的任务,也许使用后台工作人员。解释见这里:codeproject.com/Articles/841751/…
-
@NawedNabiZada 然后我从新线程中尝试相同的结果(调用
CustomW.MsgBox())
标签: c# wpf multithreading