我正在尝试将某些消息记录到RichTextBox
控件。它记录前2或3,然后抛出以下错误:
“跨线程操作无效:控制'txtLog'从其创建的线程以外的线程访问。”
这是一个非常简单的应用程序,只需一个pubnub订阅。没有尝试线程化。
我在SO上发现了另一个问题,我正在使用字符串构建器:
public StringBuilder logtext = new StringBuilder();
然后我想简化一些事情,所以我可以打电话给log("this is a log message")
:
public void log(string txt)
{
logtext.Append(Environment.NewLine + txt);
txtLog.Text = logtext.ToString();
}
就像我说的那样,它会记录几个字符串,但之后会尝试记录以下内容:
“ConnectStatus:[1,\”已连接\“,”存在\“]”
那是它抛出错误的时候。这是返回该值的代码:
pubnub.Subscribe<string>(
chnl,
DisplayReturnMessage,
DisplayConnectStatusMessage,
DisplayErrorMessage
);
public void DisplayReturnMessage(string result)
{
log(TimeStamp() + " Result: " + result);
}
如果它有帮助,这里是调试器的ss:
请忽略TimeStamp()
现在字面上返回“H:mm:ss.ffff”的事实:)
我能够手动log("ConnectStatus: [1,\"Connected\",\"presence\"]")
并且它有效,所以我不认为这是一个字符串问题。穿线的事情真的让我失望。
答案 0 :(得分:0)
根据重复的问题,我修改了log()
方法:
public void log(string txt)
{
logtext.Append(Environment.NewLine + txt);
txtLog.Invoke(new Action(delegate { txtLog.Text = logtext.ToString(); }));
}
现在可行。