c# – 从另一个进程更新TextBox文本
发布时间:2020-12-15 17:25:27 所属栏目:百科 来源:网络整理
导读:我有两个WinForms应用程序,我需要从Application2向Application1中的TextBox添加文本.我使用命名管道和WCF成功完成了这项工作.我可以成功地从Application2调用Application1中的方法但是我得到“在创建窗口句柄之前无法在控件上调用Invoke或BeginInvoke.”错误
我有两个WinForms应用程序,我需要从Application2向Application1中的TextBox添加文本.我使用命名管道和WCF成功完成了这项工作.我可以成功地从Application2调用Application1中的方法但是我得到“在创建窗口句柄之前无法在控件上调用Invoke或BeginInvoke.”错误或文本框根本没有更新.
这是我的基本代码. Application2调用GetMessage.这个根本不更新TextBox: public void GetMessage(string msg) { UpdateTextbox(msg); } private void UpdateTextbox(string msg) { this.textBox1.Text += msg + Environment.NewLine; } 这个抛出Invoke错误: 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 answer解决了这个问题.
问题是Form1的TextBox是在Form1的另一个实例上.从Application1.Form1中观察此代码,它启动命名管道服务: private void Form1_Load(object sender,EventArgs e) { ServiceHost host = new ServiceHost(typeof(Form1),new Uri[] { new Uri("net.pipe://localhost") }); host.AddServiceEndpoint(typeof(ISmsService),new NetNamedPipeBinding(),"PipeReverse"); host.Open(); } 如果我理解正确,这将启动Form1的实例.因此,当Application2调用Application1.GetMessage时,它调用ServiceHost-instance-Form1.GetMessage. 要访问Form1的主实例,我将代码更改为: public Form1() { InitializeComponent(); if (mainForm == null) { mainForm = this; } } private static Form1 mainForm; public static Form1 MainForm { get { return mainForm; } } private void UpdateTextbox(string msg) { MainForm.textBox1.Text += msg + Environment.NewLine; } 它现在正常工作.. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧
- objective-c – 归档/取消归档导致initForReadingWithData难
- 【玩转cocos2d-x之三十二】xml的解析
- cocoStudio:ScrollView控件使用记录
- AAChartKit-Swift 极其精美的iOS开源图表库现更有Swift版本
- unity中xml读取
- ios – 安装OSX Yosemite后Xcode 4.6.1崩溃
- Easier XML With Boost
- c# – Lambda Max,Max和Max
- ruby-on-rails – zip/zip(LoadError) – Breaking or rail