...或者换句话说,这个(截断的)winforms代码会抛出预期的'无法访问不同线程异常的控件':
Label label1 = new Label();
tickTimer.Elapsed += tickTimer_Elapsed;
void tickTimer_Elapsed(object sender, EventArgs e)
{
label1.Text = "New text";
}
但是这段代码没有:
Label label1 = new Label();
tickTimer.Elapsed += tickTimer_Elapsed;
void tickTimer_Elapsed(object sender, EventArgs e)
{
label1.ForeColor = Color.Red;
}
怎么回事?据我所知,你无法从后台线程访问'GUI'线程上的控件。我的计时器类是System.Timers.Timer计时器,而不是单线程winforms版本。
编辑1
从下面的LarsTech中读取两个链接,确认此检查仅针对源自控件的类。对于这两张海报,情况并非如此。我准备承认我肯定遗漏了一些东西,但Label 派生自控件,而属性im设置是Label类的直接成员,而不是'transitive'属性。
编辑2
仔细观察......看起来只有某些属性导致调用Control.Handle
继续触发线程检查过程。 Text
就是其中之一,ForeColor
不是。好。这确实导致了另一个问题,我问过here。