1
我有一个Windows窗体应用程序。C#与超时和LoadingForm的长进程
我想运行一个longprocess(coupe of seconds),它运行时我想显示一个LoadingForm,并且我也想设置一个超时。
我试图从一个新的线程设置一个计时器到我的进程,但是LoadingForm不允许这样做。
我需要这样的东西:
LoadingForm m_LoadingFrom = new LoadingForm("Checking..");
private void ShowLoadingForm()
{
m_LoadingFrom.Show();
}
private void CloseLoadingForm()
{
m_LoadingFrom.Close();
}
private LongProcess()
{
try{
ShowLoadingForm();
//doWork()..
CloseLoadingForm();
}catch(Exception e){ // timeout
CloseLoadingForm();
}
}
这已被问了很多次。使用Control.Invoke可以将打开和关闭操作安排到主线程。 –
这永远不会给“加载表单”一个绘制自己的机会。所以你只是看不到它。对于“漫长的过程”使用BackgroundWorker,所以你不要挂上UI线程。如果这会吓倒你,然后在Show()调用之后添加'm_LoadingFrom.Update();'。 –
你可能想看看我对这个问题的回答http://stackoverflow.com/questions/16750498/change-label-text-while-winform-is-open/16750573#16750573这是相同的原则 – Florian