2011-03-08 65 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