Pubnub &引用;跨线程操作无效:从创建控件的线程以外的线程访问控件;
我正在尝试将一些消息记录到Pubnub &引用;跨线程操作无效:从创建控件的线程以外的线程访问控件;,pubnub,c#,Pubnub,C#,我正在尝试将一些消息记录到RichTextBox控件。它记录前2个或3个,然后抛出以下错误: “跨线程操作无效:从创建控件“txtLog”的线程以外的线程访问该控件。” 这是一个非常简单的应用程序,只需进行一次订阅。没有人试图穿线 根据我在SO上发现的另一个问题,我正在使用stringbuilder: public StringBuilder logtext = new StringBuilder(); 然后我想简化事情,这样我就可以调用log(“这是一条日志消息”): 正如我所说,它
RichTextBox
控件。它记录前2个或3个,然后抛出以下错误:
“跨线程操作无效:从创建控件“txtLog”的线程以外的线程访问该控件。”
这是一个非常简单的应用程序,只需进行一次订阅。没有人试图穿线
根据我在SO上发现的另一个问题,我正在使用stringbuilder:
public StringBuilder logtext = new StringBuilder();
然后我想简化事情,这样我就可以调用log(“这是一条日志消息”)
:
正如我所说,它可以很好地记录一些字符串,但随后会尝试记录以下内容:
“连接状态:[1,\'Connected\',\'presence\'”
这就是它抛出错误的时候。以下是返回该值的代码:
pubnub.Subscribe<string>(
chnl,
DisplayReturnMessage,
DisplayConnectStatusMessage,
DisplayErrorMessage
);
public void DisplayReturnMessage(string result)
{
log(TimeStamp() + " Result: " + result);
}
publinub.Subscribe(
chnl,
显示返回消息,
显示连接状态消息,
显示错误消息
);
public void DisplayReturnMessage(字符串结果)
{
日志(TimeStamp()+“Result:”+Result);
}
下面是一个调试器的ss,如果它有帮助的话:
请忽略以下事实:TimeStamp()
现在字面上返回“H:mm:ss.ffff:)
我能够手动
记录(“ConnectStatus:[1,\'Connected\',\'presence\'”)
并且它工作正常,所以我认为这不是字符串问题。线程问题真的让我很反感。基于重复的问题,我修改了log()
方法:
public void log(string txt)
{
logtext.Append(Environment.NewLine + txt);
txtLog.Invoke(new Action(delegate { txtLog.Text = logtext.ToString(); }));
}
现在它工作了。不是复制品,他实际上是在使用线程。我(据我所知)不是\_(ツ)_/¯)线程化或执行任何类型的调用,这在那篇文章中都有提及。我认为
pubnub
正在使用线程化是一个合理的推断。您是否知道任何已知的.NET错误抛出该异常的情况,只是为了开玩笑?谁更有可能完全了解是否存在第二个线程:你,还是.NET运行时?
public void log(string txt)
{
logtext.Append(Environment.NewLine + txt);
txtLog.Invoke(new Action(delegate { txtLog.Text = logtext.ToString(); }));
}