版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BYH371256/article/details/83374932
本章讲述:背景线程
1 在界面初始化(InitializeComponent();)后 设置 在主界面弹出该窗口,然后阻塞其他线程执行,然后执行本窗体所有的事件,之后结束、关闭窗口,主程序继续执行 界面显示,并且等待执行完成后关闭
2 使用Loaded事件,绑定目标界面 Window_Loaded中定义背景线程等 在调用界面函数中 定义public static AutoResetEvent myResetEvent = new AutoResetEvent(false);
在背景线程CompletedWork 调用OperationSettingConnectViewModel.myResetEvent.Set();
界面show出后, 调用myResetEvent.WaitOne(100);
public partial class MainWindow : Window
{
private BackgroundWorker m_BackgroundWorker;// 申明后台对象
public MainWindow()
{
InitializeComponent();
m_BackgroundWorker = new BackgroundWorker(); // 实例化后台对象
m_BackgroundWorker.WorkerReportsProgress = true; // 设置可以通告进度
m_BackgroundWorker.WorkerSupportsCancellation = true; // 设置可以取消
m_BackgroundWorker.DoWork += new DoWorkEventHandler(DoWork);
m_BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(UpdateProgress);
m_BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork);
m_BackgroundWorker.RunWorkerAsync(this); //执行线程
}
void DoWork(object sender, DoWorkEventArgs e) //主代码事件处理
{
BackgroundWorker bw = sender as BackgroundWorker;
MainWindow win = e.Argument as MainWindow;
int i = 0;
while ( i <= 100 )
{
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}
bw.ReportProgress(i++);
Thread.Sleep(1000);
}
}
void UpdateProgress(object sender, ProgressChangedEventArgs e) //更新 通知界面更新
{
int progress = e.ProgressPercentage;
label1.Content = string.Format("{0}",progress);
}
void CompletedWork(object sender, RunWorkerCompletedEventArgs e) //完成处理显示
{
if ( e.Error != null)
{
MessageBox.Show("Error");
}
else if (e.Cancelled)
{
MessageBox.Show("Canceled");
}
else
{
MessageBox.Show("Completed");
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
m_BackgroundWorker.CancelAsync();
}
}