C # Как завершить обработчик события click с другим событием click - PullRequest
1 голос
/ 30 мая 2019

У меня есть обработчик события click для кнопки, которая формирует соединение ssh. Я хочу прекратить эту функцию еще одним нажатием кнопки «Отмена».

Однако при выполнении обработчика события обработчик события «отмена» щелчка не запускается, пока выполняется первый обработчик. Я хочу переопределить первый обработчик обработчиком «cancel».

private void button_sshconnection_Click(object sender, EventArgs e)
        { /* some code to create ssh connection */ }

private void button_cancel_Click(object sender, EventArgs e)
        { /* some code to terminate button_sshconnection_Click */ }

Я попробовал структуру кода, подобную приведенному выше, но, как я уже сказал, вторая функция не запускается во время выполнения первой функции. Если структура неправильна, может кто-нибудь сказать мне, как сделать эту работу.

Заранее спасибо,

Onur

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете попробовать реализовать асинхронную версию вашей подпрограммы, например,

   private CancellationTokenSource m_Cancellation;

   private async void button_sshconnection_Click(object sender, EventArgs e) {
     // if method is executing, do nothing. Alternative: cancel and start again   
     if (m_Cancellation != null)
       return;

     try { 
       using (m_Cancellation = new CancellationTokenSource()) {
         var token = m_Cancellation.Token;

         await Task.Run(() => {
           //TODO: implement your logic here, please, note that cancellation is cooperative
           // that's why you should check token.IsCancellationRequested

         }, token);
       }
     }
     finally {
       m_Cancellation = null;  
     }
   }

   private void button_cancel_Click(object sender, EventArgs e) {
     // If we can cancel, do it
     m_Cancellation?.Cancel();
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...