powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / BackgroundWorker и ManualResetEvent
3 сообщений из 3, страница 1 из 1
BackgroundWorker и ManualResetEvent
    #38190385
tual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще суть задачи такая.
В одном методе последовательно выполняются две долгих функции.
Общее у них один двумерный массив, из которого они только читают.
В целом говоря, ничего общего они не записывают, и возвращают каждая свой результат.
Вот подумал унести одну из них в поток дабы ускорить процесс.
Код: 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 ManualResetEvent mre = new ManualResetEvent(false);
private Result result;

{
 BackgroundWorker bw = new BackgroundWorker();
 bw.DoWork += new DoWorkEventHandler(bw_DoWork);
 bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
 bw.RunWorkerAsync(new BackgroundWorkerArgument(bitmap, image));

Rectangle rectangle = DetectRectangle(bitmapClone));
mre.WaitOne();

<код дальше>
}

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            result= (Result)e.Result;
        }

        void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorkerArgument argument = (BackgroundWorkerArgument)e.Argument;
            e.Result = CreateResult(argument.Bitmap, argument.Image);
            mre.Set();
        



Некоторые параметры переименовал, но в целом то понятно :)

Проблема такая,
<код дальше> начинает выполняться когда я делаю Set(). Это понятно.
Вот только bw_RunWorkerCompleted срабатывает уже после того. А это значит что в переменной result у меня null, а я хочу туда результат выполнения функции в потоке.
То есть как мне переделать код, чтобы result= (Result)e.Result; точно выполнилось до первой строки после WaitOne() ?
...
Рейтинг: 0 / 0
BackgroundWorker и ManualResetEvent
    #38190394
tual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.NET 2.0 если что.
Или на BackgroundWorker надо забить в этом случае ? И сделать на обычных Thread ?
...
Рейтинг: 0 / 0
BackgroundWorker и ManualResetEvent
    #38190462
tual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отбой тревоге, сделал на Thread обычных.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / BackgroundWorker и ManualResetEvent
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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