Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Tolmik
0 / 0 / 3
Регистрация: 11.11.2011
Сообщений: 24
#1

Асинхронный вызов делегата и его принудительная остановка - C#

24.09.2014, 16:50. Просмотров 694. Ответов 3
Метки нет (Все метки)

Здравствуйте, с помощью данной конструкции вызываю асинхронный метод в программе:
http://www.cyberforum.ru/csharp-beginners/thread1113787.html
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
public partial class winEditor : Window
{
   public delegate void Alias(string nameSelectedTabItem, string textSource);
   Alias _operationAliase;
   IAsyncResult _resultAliase;
 
  private void SearchAlias() /*Этот метод очень часто вызывается, а в нем идет вызов асинхронного метода,В следствии чего происходит ситуация когда этот метод необходимо вызвать повторно, однако предыдущий вызов еще не закончил работу.*/
         {   
            ......
            ......
 
            if (_operationAliase != null)
            {
                _operationAliase.EndInvoke(_resultAliase); //Вот здесь мне нужно остановить принудительно делегат, даже если он не завершил работу, так как результат не важен. Метод EndInvoke к сожалению ожидает завершения метода и только после этого освобождает занятые им ресурсы, а нужно не дожидаясь завершения это выполнить
                
            }
            _operationAliase = DeterminationAlias;
            _resultAliase = _operationAliase.BeginInvoke(selectedTabItem.Name, textSource, null, null);
        }
 
        private void DeterminationAlias(string nameSelectedTabItem, string textSource)
        {
           .....
           .....
        }
}
Подскажите как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2014, 16:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Асинхронный вызов делегата и его принудительная остановка (C#):

Принудительная остановка потока
Всем доброго времени суток!! Подскажите, пожалуйста, как принудительно...

Принудительная остановка таймера
Здравствуйте! Ситуация следующая, у моей программы триал версия, но обойти ее...

Вызов метода(делегата) из неуправляемого кода
Есть способ передать адрес делегата в неуправляемый код как адрес функции, кто...

Асинхронный вызов функции
Добрый день. нужна помощь в освоении столь непростого дела как многоопытность...

Асинхронный вызов функции
Существует функция Get_Send. Собственно ничего не возвращает, другие потоки не...

3
nedel
588 / 588 / 345
Регистрация: 09.04.2014
Сообщений: 1,397
Завершенные тесты: 1
24.09.2014, 17:15 #2
если в DeterminationAlias у вас работает какой-то цикл, то можна установить дополнительный флаг выхода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 private void SearchAlias()
         {   
            ......
            ......
 
            if (_operationAliase != null)
            {
               stopAsync=true;
                _operationAliase.EndInvoke(_resultAliase); 
            }
            _operationAliase = DeterminationAlias;
            stopAsync=false;
            _resultAliase = _operationAliase.BeginInvoke(selectedTabItem.Name, textSource, null, null);
        }
        bool stopAsync=false;
        private void DeterminationAlias(string nameSelectedTabItem, string textSource)
        {
           while(true)
          {
            if(stopAsync)
              return;
          }
        }
0
Tolmik
0 / 0 / 3
Регистрация: 11.11.2011
Сообщений: 24
24.09.2014, 17:25  [ТС] #3
Нет, задача здесь в том что есть редактируемый контрол в котором пишется SQL запрос к БД. Эти методы выполняют поиска в тексте, который берется из контрола textbox, алиаса для таблиц. Это событие происходит по любому изменению текста в textbox.(Это нужно для того чтобы была возможность вставлять и удалять из буфера запросы и алгоритм сразу определял алиасы таблиц) Но дело в том когда пользователь пишет запрос вручную, то поиск алиасов осуществляется после каждого введенного символа - понятное дело алгоритм поиска алиасов не успевает выполнится за такой короткий промежуток времени, поэтому чтобы приложение не подвисалор я вызываю этот метод асинхронно. Но когда вызываешь его повторно, то он дожидается пока выполнится предыдущий.
0
nedel
24.09.2014, 18:23     Асинхронный вызов делегата и его принудительная остановка
  #4

Не по теме:

Цитата Сообщение от Tolmik Посмотреть сообщение
поиск алиасов осуществляется после каждого введенного символа
не лучше бы буферизовать поиск, т.е. запускать его только тогда когда пользователь перетает вводить текст? Для этого нужно добавить таймер с интервалом на пример 200-300 мс, после введения символа перезапускать его, а если таймер сработает(пауза в наборе), то останавливать таймер и запускать поиск. Таким образом частота запросов уменьшистся в разы

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2014, 18:23
Привет! Вот еще темы с ответами:

Асинхронный вызов httpWebResponse
Мне нужно вернуть строку, в класс вызвавший функцию, которая получена методом...

Асинхронный вызов обработчика кнопки
Здравствуйте. При нажатии на кнопку из datagridа экспортируются данные в excel....

Асинхронный вызов: Abort и Callback
Всем привет! Недавно начал разбираться с многопоточностью в .NET. 1) Мне...

Разница лямбда выражения, делегата (\анонимного делегата), методом (\анонимных методов)
Всё просто: В чём отличия: лямбд, делегатов, анонимных делегатов, методов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru