我真的无法理解这种行为,并希望有人可以向我解释。考虑到我想从另一个线程更新我的按钮文本:
Task.Factory.StartNew((() =>
{
button1.Text = "Hello";
}));
根据我的理解,我不应该这样做,因为我在另一个线程但不知何故这是有效的,但如果我将这一行添加到代码中:
Task.Factory.StartNew((() =>
{
Thread.Sleep(500);
button1.Text = "Hello";
}));
然后它给了我:“跨线程操作无效”但现在有两个问题。
1。)为什么代码1允许我从另一个线程更改按钮文本?
2.。)当我添加那行代码时,为什么代码2会崩溃?
编辑:请注意,我的主要问题是为什么它允许我在第一个代码中更新UI内容而在第二个代码中崩溃,而不是在Task.Factory.StartNew生成新线程时。