Уведомления, когда процесс файл findfiles закончил


У меня есть многопоточное приложение, в котором я создал шаблон производителя / потребителя для обработки XML-файлов и т. д.

Что я хочу знать, это то, что будет хорошим подходом для обновления пользовательского интерфейса и когда процесс завершится.

Должен ли я перейти к потоковому подходу и создать барьер и ждать завершения всех задач или я должен просто создать событие / делегат и получить пользовательский интерфейс, чтобы поймать это для обоих обновлений пользовательского интерфейса / принуждения

2   2  

2 ответа:

Вы можете проверить Signalr , который позволяет получать PUSH-уведомления для клиентов.

Извините, этот ответ предполагал Windows Forms, потому что не было asp.net сначала тег. Надеюсь, кто-то даст хороший ответ asp.net как хорошо.

Вы можете использовать форму.Вызовите (), чтобы обновить материал из потока без GUI, вот простой пример:

    private void Form1_Load(object sender, EventArgs e)
    {
        Thread thread = new Thread(DoStuff);
        thread.Start();
    }

    void DoStuff()
    {
        Thread.Sleep(1000);
        this.Invoke(new Action(() => MessageBox.Show("Hey, this was invoked")));
    }

С помощью Invoke можно делать практически все, что угодно с формой, она запускает вызываемое действие в потоке формы. Так что вы можете изменить свой текст статуса или что-то в этом роде. Конечно, вы не должны иметь свой "бизнес-логика" внутри класса Form, и вы не должны использовать поток.Сон, я просто показываю очень простой факт, что вы можете вернуться к потоку пользовательского интерфейса таким образом.


Что касается того, должны ли вы ждать завершения всех задач, прежде чем что-либо делать, или показывать обновления статуса по мере их выполнения, это действительно зависит от вас. Мне нравится показывать обновления в пользовательском интерфейсе, когда это возможно, чтобы пользователь знал, что происходит. Также хорошо иметь индикатор выполнения, если что-то происходит, что пользователь может, и ждет. Индикатор выполнения может быть просто шатром, если у вас нет хорошего способа показать реальный прогресс.