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