2014-02-23 18 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和等待關鍵字來輕鬆實現這一點。