亲爱的论坛用户。
我为一个问题而苦恼,因为我在应用程序BackgroundWorker中使用了多线程
在DoWork中,有很多代码,我将举一个实现的示例:
if (htmleditor.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => mmMessage.BodyHtml = htmleditor.Content.GetFormattedPlainText()));
}
从代码中可以很清楚地了解到,正在做什么,我分配了mmMessage.BodyHtml,即htmleditor编辑器的格式化文本值。
出了什么问题
1。如果我在没有BackGroundWorkera的情况下执行代码,则在mmMessage.BodyHtml中以应写的文字写..
2。。如果与BackGroundWorker一起使用,则它无法从编辑器获取文本,因此...我检查InvokeRequired 并相应地控制DoWork中的htmleditor,这是必需的..,然后我收到一个错误,提示不能为属性mmMessage.BodyHtml分配值。它是只读的:
“无法更改只读消息。”
我尝试了以下代码:
if (htmleditor.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(() => mmMessage.BodyHtml = htmleditor.Content.GetFormattedPlainText()));
}
专业人士谁知道这是异步引起的,并且不希望完成。实际上,即使文本处于受控状态,他也不会阅读(如果不是这样,则是正确的)。
这是问题所在,请帮我确定:
没有多线程,一切都分配得很好, 当我为属性分配值时:
mmMessage.BodyHtml = htmleditor.Content.GetFormattedPlainText()
-使用多线程,会发生错误
mmMessage.BodyHtml(错误:“无法更改只读消息。”
-Invoke方法没有帮助..
也许我错过了什么?请帮助