powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Интересное поведение BackgroundWorker
25 сообщений из 27, страница 1 из 2
Интересное поведение BackgroundWorker
    #39741034
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть классы, которые используют воркер, решил попробовать их использовать в консольном приложении, чтобы минимум изменений.
Что получилось: сам воркер создается,
Код: c#
1.
2.
3.
4.
5.
            this.bckgrndWorker = new System.ComponentModel.BackgroundWorker();
            this.bckgrndWorker.WorkerReportsProgress = true;
            this.bckgrndWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bckgrndWorker_DoWork);
            this.bckgrndWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bckgrndWorker_ProgressChanged);
            this.bckgrndWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.bckgrndWorker_RunWorkerCompleted);



Затем при вызове
this.bckgrndWorker.RunWorkerAsync();

срабатывает bckgrndWorker_DoWork, но далее ни bckgrndWorker_ProgressChanged, ни bckgrndWorker_RunWorkerCompleted уже не вызываются.

Это особенности консольного приложения? что можно сделать, чтобы эти два метода вызывались?
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741132
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, это особенность вашего кода. Код ниже отрабатывает

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
private static void Main()
{
    var worker = new BackgroundWorker();
    worker.WorkerReportsProgress = true;
    worker.DoWork += WorkerOnDoWork;
    worker.RunWorkerCompleted += WorkerOnRunWorkerCompleted;
    worker.ProgressChanged += WorkerOnProgressChanged;
    worker.RunWorkerAsync();
    Console.ReadLine();
}

private static void WorkerOnProgressChanged(object sender, ProgressChangedEventArgs e)
{
    Console.WriteLine("WorkerOnProgressChanged");
}

private static void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    Console.WriteLine("WorkerOnRunWorkerCompleted");
}

private static void WorkerOnDoWork(object sender, DoWorkEventArgs e)
{
    Console.WriteLine("WorkerOnDoWork");
    var worker = sender as BackgroundWorker;
    worker?.ReportProgress(1);
    Thread.Sleep(2000);
}
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741145
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Павнет, это особенность вашего кода. Код ниже отрабатывает

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
private static void Main()
{
    var worker = new BackgroundWorker();
    worker.WorkerReportsProgress = true;
    worker.DoWork += WorkerOnDoWork;
    worker.RunWorkerCompleted += WorkerOnRunWorkerCompleted;
    worker.ProgressChanged += WorkerOnProgressChanged;
    worker.RunWorkerAsync();
    Console.ReadLine();
}

private static void WorkerOnProgressChanged(object sender, ProgressChangedEventArgs e)
{
    Console.WriteLine("WorkerOnProgressChanged");
}

private static void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    Console.WriteLine("WorkerOnRunWorkerCompleted");
}

private static void WorkerOnDoWork(object sender, DoWorkEventArgs e)
{
    Console.WriteLine("WorkerOnDoWork");
    var worker = sender as BackgroundWorker;
    worker?.ReportProgress(1);
    Thread.Sleep(2000);
}



да, у меня тоже работает.
Что тогда не так у меня? все практически так же
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741215
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
256kЧто тогда не так у меня?
У Вас не так то, что Вы используете BackgroundWorker, а не Task
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741216
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2256kЧто тогда не так у меня?
У Вас не так то, что Вы используете BackgroundWorker, а не Task
Как можно сравнивать эти два класса, если они выполняют разные задачи?
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741222
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kЧто тогда не так у меня? все практически так же
У тебя есть в конце Main()
Код: c#
1.
Console.ReadLine();


?

Наверно нет. Поэтому основной поток твоей проги завершается до завершения остальных, поэтому остальные просто принудительно убиваются, не закончив работать.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741223
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2256kЧто тогда не так у меня?
У Вас не так то, что Вы используете BackgroundWorker, а не Task

есть уже класс использующий воркер в винформс приложении, и его прогресс и комплит методы, хотел заюзить его без изменений.
Выше приведен пример - работает, у меня почти так же - работает только вызов this.bckgrndWorker_DoWork, а прогресс и комплит не вызываются, хотя внутри стоит типа такого, и ошибки нет, и метод не вызывается.

bw.ReportProgress(n, new ProcessStateMessage(@"Creating"));
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741238
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kCat2пропущено...

У Вас не так то, что Вы используете BackgroundWorker, а не Task

есть уже класс использующий воркер в винформс приложении, и его прогресс и комплит методы, хотел заюзить его без изменений.
Выше приведен пример - работает, у меня почти так же - работает только вызов this.bckgrndWorker_DoWork, а прогресс и комплит не вызываются, хотя внутри стоит типа такого, и ошибки нет, и метод не вызывается.

bw.ReportProgress(n, new ProcessStateMessage(@"Creating"));
полный пример кидайте, чо сидеть гадать. Вам показали, что в консоли воркер работает, ошибка у вас.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741240
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав,
Dima T уже разгадал).
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741242
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: c#
1.
Console.ReadLine();

если этого не было, значит он вообще отладкой не пользуется.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741272
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Dima T
Код: c#
1.
Console.ReadLine();

если этого не было, значит он вообще отладкой не пользуется.
Отладка тут при чем? Основной поток просто должен дождаться завершения вспомогательных потоков, если они ему важны. Если не важны - не должен, что и произошло, тут ошибка проектирования, отладчик не поможет.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741273
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Супер_ПавCat2пропущено...

У Вас не так то, что Вы используете BackgroundWorker, а не Task
Как можно сравнивать эти два класса, если они выполняют разные задачи?
Что может BackgroundWorker, но не может Task?
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741281
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Ты меня не понял.
Без той строки у него черный экран моргнет и закроется.
Т.е. как можно вообще проверять что не работает?
Видно же что DOS окно закрылось.
Дурдом).
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741283
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
Если ты про await с task и async то я с тобой согласен.
Но уже говорили что у него книжки старые.)
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741284
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TC молчит. Опять в несознанку пошел.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741285
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Что может BackgroundWorker, но не может Task?

Что могут они оба, чего не может System.Thread? :-)
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741286
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatCat2Что может BackgroundWorker, но не может Task?

Что могут они оба, чего не может System.Thread? :-)))
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741287
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из-за выхода из Main у тебя фоновый поток прибивается до того, как успевает вызвать progress и complete.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741288
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Мне еще интересно куда он прогрессБар приткнет.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741291
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Dima T,
Ты меня не понял.
Без той строки у него черный экран моргнет и закроется.
Т.е. как можно вообще проверять что не работает?
Видно же что DOS окно закрылось.
Дурдом).
Можно давить Ctrl+F5. Тогда в черном экране будет "Press any key ..." после того как прога отработает.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741303
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Хмм.... Это не знал. Ты волшебник)).
Но это значит, что без отладки он не запускал).
У меня 50 на 50 обычно. Половина через студию и половина без студии.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741305
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Dima T,
Хмм.... Это не знал. Ты волшебник)).
Колдун ))) Просто консольные проги это моё всё.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741307
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
По работе заставляли или от чего любовь? Линукс дома?
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741311
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Dima T,
По работе заставляли или от чего любовь? Линукс дома?
Я на себя работаю последние 15 лет, некому заставлять.
По теме: я не знаю что такое BackgroundWorker. Совсем. Извините. Ламер в C#. Но знаю как потоки в виндовсе устроены. Читайте Рихтера, там все расписано.
...
Рейтинг: 0 / 0
Интересное поведение BackgroundWorker
    #39741788
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
private static void Main()
{
    var evnt = new ManualResetEvent(false);

    var bw = new BackgroundWorker {
        WorkerReportsProgress = true
    };

    bw.DoWork += (s, e) => {
        for (var i = 0; i < 10; i++)
        {
            bw.ReportProgress(i * 10, i);
            Thread.Sleep(500);
        }
    };

    bw.ProgressChanged += (s, e) => Console.WriteLine($"{e.ProgressPercentage}% done.");

    bw.RunWorkerCompleted += (s, e) => {
        Console.WriteLine("Completed!");
        evnt.Set();
    };

    bw.RunWorkerAsync();
    evnt.WaitOne();
}
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Интересное поведение BackgroundWorker
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]