Мне интересно, может ли кто-нибудь мне помочь.У меня есть служба wcf, работающая через TCP, которая будет использовать дуплексную службу.В настоящее время эта служба вызывает бизнес-объект, который, в свою очередь, выполняет некоторую обработку.Хотя эта обработка происходит в фоновом потоке, я хочу, чтобы интерфейс пользователя обновлялся в определенные моменты.Я прикрепил свой код ниже.TestStatus должен быть разбит на шесть частей, и служба должна обновлять пользовательский интерфейс форм Windows каждый раз, когда это изменяется.
Класс Scenariocomponent является одноэлементным (следующим).
public void BeginProcessingPendingTestCases()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessPendingTestCases));
}
public void BeginProcessingPendingTestCases()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessPendingTestCases));
}
private void ProcessPendingTestCases(object state)
{
while (this.IsProcessingScenarios)
{
ProcessNextPendingTestCase();
}
}
private void ProcessNextPendingTestCase()
{
while (this.ServiceStatus == Components.ServiceStatus.Paused)
{
//Wait.
}
var testOperation = this.PendingTestCases.Dequeue();
if (testOperation.OperationStatus == TestStatus.Pending)
{
throw new NotImplementedException(); //TODO : Handle test.
if (testOperation.OperationStatus != TestStatus.Failed)
{
testOperation.OperationStatus = TestStatus.Processed;
}
this.CompletedTestCases.Enqueue(testOperation);
}
}
Первоначально я былиспользуя MSMQ для обновления пользовательского интерфейса, поскольку он работал достаточно, однако это больше не приемлемо из-за ограничений клиента.
Мой сервис выглядит следующим образом:
public class TestHarnessService : ITestHarnessService
{
public bool Ping()
{
return true;
}
public bool IsProcessingScenarios()
{
return ScenarioComponent.Instance.IsProcessingScenarios;
}
public void BeginProcessingScenarios(string xmlDocument, Uri webServiceUri)
{
var doc = new XmlDocument();
doc.LoadXml(xmlDocument);
var scenarios = ScenarioComponent.Deserialize(doc);
ScenarioComponent.Instance.EnqueueScenarioCollection(scenarios, webServiceUri);
ScenarioComponent.Instance.BeginProcessingPendingTestCases();
}
public void ValidateScenarioDocument(string xmlDocument)
{
var doc = new XmlDocument();
doc.LoadXml(xmlDocument);
ScenarioComponent.ValidateScenarioSchema(doc);
}
ITestOperationCallBack Callback
{
get
{
return OperationContext.Current.GetCallbackChannel<ITestOperationCallBack>();
}
}
Теперь мне нужен пользовательский интерфейс для обновления каждогоВремя, когда тестирование изменяется или завершается, но я не уверен, как этого добиться.Любая обратная связь будет принята с благодарностью.
Спасибо!