110,538
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Debug.Print("主线程 " + Thread.CurrentThread.ManagedThreadId);
var f = new Form2();
this.backgroundWorker1.DoWork += BackgroundWorker1_DoWork;
this.backgroundWorker1.RunWorkerCompleted += (s, arg) =>
{
Debug.Print("RunWorkerCompleted 事件发送在主线程 " + Thread.CurrentThread.ManagedThreadId);
f.Close();
};
this.backgroundWorker1.RunWorkerAsync();
f.ShowDialog();
MessageBox.Show("Form2关闭啦");
}
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Debug.Print("子线程 " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(3000);
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var f = new Form2();
this.backgroundWorker1.DoWork += BackgroundWorker1_DoWork;
this.backgroundWorker1.RunWorkerCompleted += (s, arg) => f.Close();
this.backgroundWorker1.RunWorkerAsync();
f.ShowDialog();
MessageBox.Show("Form2关闭啦");
}
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(3000);
}
你可以看到,3秒钟之后 Form2 实例自动关闭了,从而执行了 MessageBox.Show 语句。可见 ShowDiaplog 是只阻塞用户交互,并不阻塞主线程。