2014-02-23 17 views
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(); 
    }   
} 
+0

这已被问了很多次。使用Control.Invoke可以将打开和关闭操作安排到主线程。 –

+2

这永远不会给“加载表单”一个绘制自己的机会。所以你只是看不到它。对于“漫长的过程”使用BackgroundWorker,所以你不要挂上UI线程。如果这会吓倒你,然后在Show()调用之后添加'm_LoadingFrom.Update();'。 –

+0

你可能想看看我对这个问题的回答http://stackoverflow.com/questions/16750498/change-label-text-while-winform-is-open/16750573#16750573这是相同的原则 – Florian

回答

0

您可以使用async和等待关键字来轻松实现这一点。