Я делал это раньше без проблем. Единственное, в чем вы должны убедиться, это дождаться завершения процессов асинхронного чтения, прежде чем вызывать NotifyComplete();
.
Вот пример из одного из моих приложений. Мне пришлось удалить большую часть логики, но она должна показать вам, как идет процесс. При этом используется слегка измененная версия WebClient, где я добавил Timeout, но принципы те же, что и у службы, которую вы вызываете
Вот пример кода:
private void UpdateTiles(ShellTile appTile)
{
try
{
var wc = new WebClientWithTimeout(new Uri("URI Removed")) { Timeout = TimeSpan.FromSeconds(30) };
wc.DownloadAsyncCompleted += (src, e) =>
{
try
{
//process response
}
catch (Exception ex)
{
// Handle exception
}
finally
{
FinishUp();
}
};
wc.StartReadRequestAsync();
}
private void FinishUp()
{
#if DEBUG
try
{
ScheduledActionService.LaunchForTest(_taskName, TimeSpan.FromSeconds(30));
System.Diagnostics.Debug.WriteLine("relaunching in 30 seconds");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
#endif
NotifyComplete();
}