如何使用后台工作者加载表单? C#
How to use background worker to loading a form? c#
单击按钮后如何使用后台工作程序加载表单?我要使用它,因为我的表单加载大约需要 20-30 秒。请帮助我。
这是一个来自简单表单项目的示例实现 class。我正在使用同步上下文将进度更新编组到 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
}
}
单击按钮后如何使用后台工作程序加载表单?我要使用它,因为我的表单加载大约需要 20-30 秒。请帮助我。
这是一个来自简单表单项目的示例实现 class。我正在使用同步上下文将进度更新编组到 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
}
}