private void button1_Click(object sender, EventArgs e)
{
fortest test = new fortest(NewMethod);
test.Invoke();
//NewMethod();
} private static void NewMethod()
{
string aa = "";
for (int i = 0; i < 200; i++)
{
if (i == 198)
{
aa = "123";
MessageBox.Show(aa);
}
}
}
如果直接调用这个循环方法UI会死掉,但是如果用一个委托的Invoke方法则不会,原因是什么?
{
fortest test = new fortest(NewMethod);
test.Invoke();
//NewMethod();
} private static void NewMethod()
{
string aa = "";
for (int i = 0; i < 200; i++)
{
if (i == 198)
{
aa = "123";
MessageBox.Show(aa);
}
}
}
如果直接调用这个循环方法UI会死掉,但是如果用一个委托的Invoke方法则不会,原因是什么?
BeginInvoke肯定要起新线程
Invoke跟直接调用没啥区别
不明白你的200次是什么意思?200吃太少了,几乎没有区别,都是立即结束,如果加大循环,
test.Invoke();也好NewMethod();也好,界面都是死掉的,除非你用BeginInvoke,这样界面不会死
以下摘自msdn
公共语言运行时为每个委托类型提供 Invoke 方法(使用与该委托相同的签名)。 不必从 C#、Visual Basic 或 Visual C++ 显式调用此方法,因为编译器将自动调用此方法。 需要查找委托类型的签名时 Invoke 方法在 反射 上很有用。