Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Tolmik
0 / 0 / 0
Регистрация: 11.11.2011
Сообщений: 24
#1

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

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

Здравствуйте, с помощью данной конструкции вызываю асинхронный метод в программе:
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#):

Правильно ли выполнено задание? (Асинхронный вызов делегата) - C#
Собственно, вот задание: Объявить делегат, который ссылается на произвольную бинарную операцию над целыми числами, т.е. int Op(int x,...

.NET 4.x Принудительная остановка потока - C#
Всем доброго времени суток!! Подскажите, пожалуйста, как принудительно остановить поток Thread, т.е. остановка нужна во время его...

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

Вызов метода(делегата) из неуправляемого кода - C#
Есть способ передать адрес делегата в неуправляемый код как адрес функции, кто нибудь решил эту задачу для использования в своих проектах?...

Асинхронный вызов функции - C#
Существует функция Get_Send. Собственно ничего не возвращает, другие потоки не трогает, как её можно попроще выполнить асинхронно ? ...

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

3
nedel
574 / 574 / 250
Регистрация: 09.04.2014
Сообщений: 1,356
Завершенные тесты: 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 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

.NET 4.x Асинхронный вызов обработчика кнопки - C#
Здравствуйте. При нажатии на кнопку из datagridа экспортируются данные в excel. нужно, чтоб это происходило асинхронно. Думал сделать с...

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

.NET 4.x Разница лямбда выражения, делегата (\анонимного делегата), методом (\анонимных методов) - C#
Всё просто: В чём отличия: лямбд, делегатов, анонимных делегатов, методов, анонимных методов? У меня в проге сучилась такая...

Как создать объект делегата и вызвать его? - C#
Добрый день! Написал код, нужно: создать объект делегата и вызвать его using System; using System.Collections.Generic; using...


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

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

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