Дуплексные сервисы / Singleton класс с фоновым потоком - PullRequest
0 голосов
/ 04 ноября 2010

Мне интересно, может ли кто-нибудь мне помочь.У меня есть служба 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>();
        }
    }

Теперь мне нужен пользовательский интерфейс для обновления каждогоВремя, когда тестирование изменяется или завершается, но я не уверен, как этого добиться.Любая обратная связь будет принята с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2010

Вместо использования WinForms вы можете использовать WPF и привязку, которые будут обрабатывать обновление для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...