我在Windows应用程序中托管WCF服务,WCF服务从另一个Windows服务接收消息,我需要在打开的表单内的文本框中显示这些消息
我该如何实现?我使用以下代码,但它不起作用:
表单代码:
public partial class Form1 : Form
{
private ServiceHost Host;
public Form1()
{
InitializeComponent();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Host.Close();
}
public void WriteMessage(string message)
{
richTextBox1.Text += message;
richTextBox2.Text = message;
}
private void StartBtn_Click(object sender, EventArgs e)
{
Host = new ServiceHost(typeof(MonitoringData));
Host.Open();
button1.Enabled = false;
}
}
WCF服务代码:
public class MonitoringData : IMonitoringData
{
public void DoWork(string message)
{
Form1 monitorForm = new Form1();
monitorForm.WriteMessage(message);
}
}
表单由2个文本框和一个启动WCF服务的按钮组成
提前致谢
答案 0 :(得分:1)
我认为您的问题源于DoWork
方法,尤其是此行
Form1 monitorForm = new Form1();
您只是为了调用Form1
方法而实例化一个新的WriteMessage
对象,但是您从不显示该表单,它只是超出了范围。如果你有一个Form1
类的现有引用,那么你应该传递它来调用现有表单上的WriteMessage
方法。
答案 1 :(得分:0)
我已经解决了,我在WCF服务中使用了以下代码并且它可以正常工作:
public class MonitoringData : IMonitoringData
{
public void DoWork(string message)
{
Form1 monitorForm = (Form1)System.Windows.Forms.Application.OpenForms[0];
monitorForm.WriteMessage(message);
}
}