为什么button2_Click()不能正确执行?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication35
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
Button btn1 = new Button();
btn1.Text = "btn1"; btn1.Dock = DockStyle.Left;
btn1.Click += this.button1_Click;
this.Controls.Add(btn1);
Button btn2 = new Button();
btn2.Text = "btn2"; btn2.Dock = DockStyle.Left;
btn2.Click += this.button2_Click;
this.Controls.Add(btn2);
}
/// <summary>
/// 可以正确执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
((Button)sender).Text = "Running...";
dlg_void_void pf = new dlg_void_void(SetFormText);
var aysncRst = this.BeginInvoke(pf);
this.EndInvoke(aysncRst);
((Button)sender).Text = "Complete";
}
/// <summary>
/// 在执行后阻塞在SetFormText()的 this.Invoke(pf);
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
((Button)sender).Text = "Running...";
dlg_void_void pf = new dlg_void_void(SetFormText);
var aysncRst = pf.BeginInvoke(null, null);
pf.EndInvoke(aysncRst);
((Button)sender).Text = "Complete";
}
delegate void dlg_void_void();
private void SetFormText()
{
if (this.InvokeRequired)
{
dlg_void_void pf = new dlg_void_void(SetFormText);
this.Invoke(pf);
return;
}
var sum = 0;
for (int i = 0; i < 10; i++)
{
sum += i;
}
this.Text = sum.ToString();
}
}
}