Обновление полосы состояния в форме из BackgroundWorker - PullRequest
0 голосов
/ 13 декабря 2018

В настоящее время я беру существующий дизайн и рефакторинг определенных аспектов.Я пытаюсь обернуть класс BackgroundWorker в отдельный объект и вызвать импорт данных в отдельном потоке.Моя единственная проблема заключается в получении объекта StatusStrip для обновления в форме.Приложение использует Reflections, и я учел это при переносе процедуры импорта.Я устранил все перекрестные потоки к этому пункту.Я перенаправил обратный вызов для обновления StatusStrip из формы в этот объект-обертку, и импорт данных обращается к обертке.В форме есть метод для обработки исходного обратного вызова.Я просто должен выяснить, как вызвать обновление через потоки.

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

1 Ответ

0 голосов
/ 14 декабря 2018

Итак, все получилось.

В случае, если к классу-оболочке BackgroundWorker был вызван вызов, я сделал следующее в соответствии с предложением Ника:

private void updtStatus(object sender, EventArgs e)
    { if (MainForm.InvokeRequired)
      { MainForm.Invoke(new DoUIWorkHandler(MainForm.updtStatus), new object[] { sender, e }); }
    }

Примечание: MainForm.updtStatus - это исходное событие в форме, котороебыл вызван импортом данных для обновления StatusStrip.

Я нашел в другом потоке stackoverflow это:

public delegate void DoUIWorkHandler();

И я изменил делегат для своего кода в верхней частиОболочка BackgroundWorker:

public delegate void DoUIWorkHandler(object sender, EventArgs args);

Это была часть делегата, которую мне не хватало!Работает как шарм!Спасибо за вашу помощь в этом вопросе.

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