2015-10-12 58 views
0

我已經用C#編寫了Windows服務。僅出於測試目的,我需要將臨時WPF前端放到服務上。我正在使用WPF服務中的ServiceController類來允許服務啓動和停止,但是我需要在測試期間向測試人員發送數據以便知道何時有足夠的數據通過服務停止服務。如何從WPF和C調用Windows服務異步#

回答

0

可以使用屬性:

[OperationContract (IsOneWay = true)] 

或者異步

+0

這是一個Windows服務不是WCF服務 – bilpor

+0

對不起,我以爲這是Wcf。 – Jsperk

0

添加的方法爲您服務,提供您所需要的信息裏面,然後你可以選擇你的UI內的事件調用該方法。

比方說,每次一個按鈕被點擊到你的用戶界面,你打電話給你的服務方法>

private void Button_Click(object sender, EventArgs e) 
{ 
    yourservice.GetInfo(); 
} 

我的建議是,你選擇最適合您需求的最佳情況下,你甚至可以把它在每一個事件這發生在你的用戶界面中。

您可以創建一個帶有while循環的異步方法,它可以在某個給定的時間保持檢查您的服務。

public async Task<int> CheckServiceAsync() 
{ 
    while(condition) 
    { 
     Thread.Sleep(1000); 
     return service.GetInfo(); 
    } 
} 

然後在您的UI:

TextBox.Text = await CheckServiceAsync(); 

我想異步的方式是最好的,因爲你的UI將不會被鎖定在等待您的服務響應。

編輯:

你需要的方式2個應用程序之間進行通信。我以爲你已經成立了。您需要一個WCF(您可以使用命名管道)應用程序在它們之間進行通信。您的服務和您的WPF應用程序正在運行在不同的進程中。檢查this。 NetNamedPipeBinding是同一臺機器上進程的最快速度。

命名管道(不使用WCF)是有點低級別,它可以很難。 WCF更容易,你可以非常快地設置事物(一旦你知道你在做什麼)。設置你的WCF,在這個答案中使用我給你的邏輯,你會很好。

檢查this WCF tutorial。它具有您需要的配置基礎知識,但請確保您使用NetNamedPipeBinding作爲綁定。

+0

因爲我正在使用Windows服務,所以在服務本身中,我在'Program'類中創建了一個公共靜態布爾標誌。該服務設置。我在向wpf應用公開該標誌時遇到問題 – bilpor

+0

我用我所說的更新了我的答案,並刪除了評論。請檢查一下。快樂的編碼。 ;) –

+0

@bilpor你有看到我的更新嗎? –