【发布时间】:2009-04-04 17:28:41
【问题描述】:
注意:系列的一部分:C#: Accessing form members from another class 和 How to access form objects from another cs file in C#。
你好,
这个想法是在 TCP 客户端接收/发送数据包时使用备忘录通知用户。
经过几次修复,最合适的解决方案似乎是这个
public string TextValue
{
set
{
this.Memo.Text += value + "\n";
}
}
是这样称呼的
var form = Form.ActiveForm as Form1;
if(form != null)
form.TextValue = "Test asdasd";
但是,调用代码会引发异常,因为线程调用不安全。我在msdn找到了解决方案,但我似乎无法获得他们在那里使用的方法。
这是我的翻拍,没用。
private void SetTextMemo(string txt)
{
if(this.Memo.InvokeRequired)
{
this.Invoke(SetTextMemo,txt); //error here
}
else
{
this.Memo.Text += txt + "\n";
}
}
错误:
参数“1”:无法从“方法组”转换为“System.Delegate”
参数“2”:无法从“字符串”转换为“对象[]”
基本上,我正在尝试使用 Invoke 从另一个线程访问备忘录(或者更可能说,将文本添加到备忘录中)。我以前从未使用过它,也许这就是我误解我的错误的原因。
【问题讨论】:
标签: c# winforms multithreading invoke