C# 调用线程无法访问此对象-计时器

C# 调用线程无法访问此对象-计时器,c#,wpf,multithreading,timer,C#,Wpf,Multithreading,Timer,我在一个间隔为1000的方法中设置了一个计时器,这样它每秒钟就会在文本框中键入另一个对应的字符(几乎自动键入)。当我检查\u currentTextLength==\u text.Length时,我得到一个线程错误“调用线程无法访问此对象,因为它属于另一个线程。” 变量\u text是私有类变量,\u currentTextLength也是私有类变量\文本框是不言自明的 有什么办法可以解决这个问题吗?这仅仅意味着您正试图从一个线程访问某个UI元素,而该线程不是在其上创建的。要克服这个问题,您需要

我在一个间隔为
1000
的方法中设置了一个
计时器
,这样它每秒钟就会在
文本框
中键入另一个对应的字符(几乎自动键入)。当我检查
\u currentTextLength==\u text.Length
时,我得到一个线程错误“调用线程无法访问此对象,因为它属于另一个线程。”

变量
\u text
是私有类变量,
\u currentTextLength
也是私有类变量<代码>\文本框是不言自明的


有什么办法可以解决这个问题吗?

这仅仅意味着您正试图从一个线程访问某个UI元素,而该线程不是在其上创建的。要克服这个问题,您需要像这样访问它

this.Dispatcher.Invoke((Action)(() =>
    {
        //access it here
    }));
注意:如果您想检查您是否可以正常访问它,您可以使用

使用计时器而不是计时器

集成到调度程序队列中的计时器 以指定的时间间隔和指定的优先级处理


应该可以解决您的问题。

您需要使用dispatcher.Invoke,然后再调用_text.Length,因为它是从另一个线程中调用的“而不是它在其上创建的线程”…@Moo Juice:这是win表单,但原则上是相同的…@H.B。,好的观点-谢谢。所以当你在谷歌上搜索错误消息时,你发现了什么,以及你发现的信息中有什么不清楚的地方?非常有用。非常感谢。
this.Dispatcher.Invoke((Action)(() =>
    {
        //access it here
    }));
Dispatcher.CheckAccess