【发布时间】:2012-04-27 15:49:46
【问题描述】:
我有两个 WinForms 应用程序,我需要将文本从 Application2 添加到 Application1 中的 TextBox。我已经使用命名管道和 WCF 成功完成了这项工作。我可以成功地从 Application2 调用 Application1 中的一个方法,但是我得到“在创建窗口句柄之前无法在控件上调用 Invoke 或 BeginInvoke。”错误或文本框未更新全部。
这是我的基本代码。 GetMessage 由 Application2 调用。这个根本不更新 TextBox:
public void GetMessage(string msg)
{
UpdateTextbox(msg);
}
private void UpdateTextbox(string msg)
{
this.textBox1.Text += msg + Environment.NewLine;
}
这个抛出调用错误:
public void GetMessage(string msg)
{
Action a = () => UpdateTextbox(msg);
textBox1.BeginInvoke(a);
}
我试图通过强制创建句柄来欺骗我的方式,但它也不会更新 TextBox:
public void GetMessage(string msg)
{
IntPtr handle = textBox1.Handle;
Action a = () => UpdateTextbox(msg);
textBox1.BeginInvoke(a);
}
我该怎么办?
【问题讨论】:
-
查看this question的答案,可能会有帮助。
-
如果我理解正确,您有两个不同的应用程序 (exe),并且您正试图从 application2 更改 application1 中的某些内容。如果没有一些进程间通信系统,这是无法完成的。 (WCF,NamedPipes,你已经完成了)
-
Torbjörn: 我试过 textBox1.SafeInvoke(a, false/true);但它不会更新文本框。没有错误,文本框文本保持不变..