-3
如何在點擊按鈕後使用後臺工作器加載表單?我會用它,因爲我的表單需要大約20-30秒才能加載。請幫幫我。如何使用後臺工作器加載表單? c#
如何在點擊按鈕後使用後臺工作器加載表單?我會用它,因爲我的表單需要大約20-30秒才能加載。請幫幫我。如何使用後臺工作器加載表單? c#
這裏是一個簡單的表單項目的示例實現類。我正在使用同步上下文將進度更新編組到UI線程。在構造函數中,它獲取當前UI線程的上下文,以便它可以在後臺工作線程中用於提供狀態更新。
我也向你展示瞭如何取消正在運行的後臺工作者。
public partial class Form1 : Form
{
BackgroundWorker _worker = new BackgroundWorker();
SynchronizationContext _syncContext;
public Form1()
{
InitializeComponent();
_syncContext = SynchronizationContext.Current;
}
private void btnLoadForm_Click(object sender, EventArgs e)
{
_worker.WorkerReportsProgress = true;
_worker.WorkerSupportsCancellation = true;
_worker.DoWork += new DoWorkEventHandler(HandleDoWork);
_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(HandleWorkerCompleted);
_worker.ProgressChanged += new ProgressChangedEventHandler(HandleProgressChanged);
_worker.RunWorkerAsync();
}
private void btnCancel_Click(object sender, EventArgs e)
{
if (_worker.WorkerSupportsCancellation)
{
_worker.CancelAsync();
}
}
private void HandleDoWork(object sender, DoWorkEventArgs e)
{
// DO Any work to instantiate the form
System.Threading.Thread.Sleep(2000);
if (_worker.CancellationPending)
{
e.Cancel = true;
}
else
{
Form2 newForm = new Form2();
newForm.ShowDialog();
}
}
private void HandleProgressChanged(object sender, ProgressChangedEventArgs e)
{
// DO Progress Bar Updates Here
SendOrPostCallback callback = new SendOrPostCallback((o) =>
{
label1.Text = "This is my Async content";
});
_syncContext.Send(callback, null);
}
private void HandleWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// DO Any completed step items here
}
}
Rob Stewart先生,非常感謝.. – Qwerty
http://stackoverflow.com/help/how-to-ask 你目前在解決這個問題上的嘗試是什麼?任何簡短的例子?向我們展示你到目前爲止所研究的內容。 – SailAvid
特定於UI的所有內容都屬於mainthread。如果您的表單需要很長時間才能加載,那麼將其加載緩慢的內容放入不同的線程中,而不是加載本身。但是要注意,將它放到不同的線程中會使表單本身不能更早使用,如果工作表單需要在後臺加載的東西。 – Ralf
我看過教程。他們使用進度條,當進度條達到100%時,會彈出一條消息,提示「成功」。在我的情況下,當進度條工作達到100%時,我想同時加載我的表單,以最小化加載表單的等待時間。請幫助我 – Qwerty