为什么我可以从不同的线程访问forecolor属性

时间:2014-03-11 12:23:53

标签: c# multithreading winforms timer

...或者换句话说,这个(截断的)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

0 个答案:

没有答案