
这是我的基本代码. 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;} 它现在正常工作..
总结以上是内存溢出为你收集整理的c# – 从另一个进程更新TextBox文本全部内容,希望文章能够帮你解决c# – 从另一个进程更新TextBox文本所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)