在傳統的應用程序中,我們有一個單一的winform,在執行單擊按鈕時執行代碼時鎖定...以及在代碼執行之前它不鎖定它只是「停止響應」。簡單的加載形式/線程
什麼是最好的(最少量的代碼和工作)方式將下面的代碼包裝到一個單獨的線程,並顯示一個加載窗口(frmLoading),而它執行?我知道這應該是相對簡單的,但我已經嘗試了一些尚未完全解決的問題。
private void btnSynch_Click(object sender, EventArgs e)
{
btnSynch.Enabled = false;
if(chkDBSynch.Checked)
PerformDBSyncronization();
if(chkAppSynch.Checked)
PerformApplicationSyncronization();
btnSynch.Enabled = true;
}
編輯: 好吧,我應該提到曾試圖BackgroundWorker的,但我想通了,我在那裏絆倒了....這段代碼執行和加載形式得到拋出的主要形式背後這就是爲什麼我認爲它不起作用。任何人都可以告訴我如何防止這種情況發生?
private void btnSynch_Click(object sender, EventArgs e)
{
btnSynch.Enabled = false;
frmLoading loadingWindow = new frmLoading();
loadingWindow.Show();
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (s, args) =>
{
Thread.Sleep(6000); //TODO:just for testing
if(chkDBSynch.Checked)
PerformDBSyncronization();
if(chkAppSynch.Checked)
PerformApplicationSyncronization();
};
bw.RunWorkerCompleted += (s, args) =>
{
loadingWindow.Close();
};
bw.RunWorkerAsync();
btnSynch.Enabled = true;
}
你需要知道什麼時候做,或者這是一種「發射後不管」的情況? – richard 2011-04-15 20:47:07
@Richard DesLonde - 我不需要知道它什麼時候完成,只需要給用戶一個表明表單沒有「凍結」的指示。 – AGoodDisplayName 2011-04-15 20:50:34