2011-03-08 73 views
0

我托管在Windows应用程序中的WCF服务,WCF服务从另一个窗口服务接收消息,我需要显示打开的窗体中的文本框中输入这些信息显示数据

哪有我实现了吗?我使用下面的代码,但它不工作:

形式代码:

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服务

在此先感谢

+1

你在哪里调用服务的方法来获取返回值? – Kumar 2011-03-08 14:39:19

+0

我打电话给它从另一个窗口服务 – Ahmy 2011-03-08 14:40:12

回答

0

我已经解决了,我用的WCF服务下面的代码,它工作正常:

public class MonitoringData : IMonitoringData 
{ 
    public void DoWork(string message) 
    { 

     Form1 monitorForm = (Form1)System.Windows.Forms.Application.OpenForms[0]; 
     monitorForm.WriteMessage(message);    
    } 
} 
+0

Quintins答复接受它?我已经为他辩护过,但他没有!有什么更好的让这个问题没有回答任何访问者或接受正确的答案? – Ahmy 2011-03-08 15:20:57

+0

始终接受正确的答案。这是有礼貌的事情,它会确保人们继续回答你所问的问题。 – 2011-03-08 15:25:33

+0

我是那个要求Quintins写他的答案来接受它的人,但他并没有这么写我并接受它来帮助任何访问者或成员知道正确的答案,因为我的信息是发送正确答案而不是显示谁写了正确的答案,因为如果任何人有我的问题,他不会搜索谁回答正确的答案,但会寻找正确的答案,如果Quintins写回答我会接受它,我给了他VoteUp他的评论因为这是可用的,所以我可以做别的? ... – Ahmy 2011-03-09 08:16:24

1

我认为你的问题源于从DoWork方法,尤其是这条线

Form1 monitorForm = new Form1(); 

你实例化一个新的Form1对象只是调用WriteMessage方法,但你从来没有展示形式,它只是超出范围。如果您有一个Form1类的现有引用,那么您应该通过该方法在现有表单上调用WriteMessage方法。

+0

我怎样才能对Form1的引用?是使Form1静态? – Ahmy 2011-03-08 14:46:41

+0

@Amy我不知道你的应用程序结构,如果你需要创建一个需要访问它的静态变量,是否有可能传递一个引用。 – 2011-03-08 14:47:52

+0

“System.Windows.Forms.OpenForms [0]”是什么意思? – Ahmy 2011-03-08 14:59:13