Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pubnub &引用;跨线程操作无效:从创建控件的线程以外的线程访问控件;_Pubnub_C# - Fatal编程技术网

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(); }));
    }