2015-04-10 3 views
0

Я написал класс утилиты C# (DLL), который вызывается приложением Windows. В приложении Windows я устанавливаю backgrounderWorker, чтобы обеспечить длительный код, чтобы не зависеть от приложения Windows. Занимающий много времени код находится в DLL класса утилиты. Теперь я настраиваю две кнопки в приложении Windows на кнопку «отправить» - где в классе утилиты вызывается многозадачный код и кнопка «отменить».Кнопки управления событиями на WinForm из DLL

Я бы хотел, чтобы кнопка «отменить» остановила код backgroundWorker, если щелкнуть. Проблема заключается в том, что кнопка «Отмена» находится в приложении Windows, а код находится в DLL. Итак, есть ли способ для меня, возможно, присоединить кнопку «onClick» «отменить» кнопки к DLL, а затем периодически проверять DLL, чтобы увидеть, была ли нажата кнопка?

BTW, кнопка отмены работает до тех пор, пока код DLL не будет инициирован.

Я прав в своих мыслях или есть лучший способ? Любая помощь будет оценена по достоинству.

+0

Вы получите более целенаправленный совет, если вы опубликуете дистилляцию соответствующего кода. – DWright

ответ

0

Я действительно вернулся и посмотрел документацию, связанную с событиями и событиями. Я сделал следующее в DLL:

  1. Сделано общественный класс добавил EventHandler, мои собственные EventArgs, и подкласс (eventWatcher) провести мероприятие (назовем его OnCancel)
  2. Я зарегистрировал eventWatcher в прослушивать событие OnCancel в DLL.
  3. Я сделал eventWatcher общедоступным, чтобы его можно было использовать в клиентском приложении.

В приложении клиента, я сделал следующее:

  1. Я изменил кнопку отмены, чтобы поднять событие OnCancel. Это позволило мне назначить метод в DLL для обработки изящного выхода из трудоемкого кода в DLL.

Теперь он работает так, как ожидалось!

0

Да, можно зарегистрировать события между проектами. все, что вам нужно сделать, это иметь ссылку на приложение winforms внутри вашей DLL и открыть кнопку отмены. то вы можете зарегистрироваться в любом из его событий внутри DLL-кода. Однако, я не уверен, что это лучший способ сделать то, что вы хотите. Я думаю, что лучший способ сделать это - иметь метод «Отменить внутри dll» и нажать кнопку «Отправить», чтобы вызвать эту функцию. Таким образом, ваша dll меньше зависит от вашего приложения winforms.

+0

Я сделал что-то похожее на это, но не мог вызвать функцию «Отменить», чтобы вызвать функцию вызова, потому что длительный процесс все равно будет работать. С событием в DLL я могу сделать несколько периодических проверок в трудоемком процессе, и если событие поднято, обработайте его соответствующим образом. Спасибо за предложение. – FDot

Смежные вопросы