Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447

Получение возвращаемого значения при возникновении события

28.03.2018, 17:15. Показов 1233. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть событие
C#
1
2
3
4
5
6
7
        public delegate NewRecivedPacket RecivedNewMessage();
        private event RecivedNewMessage newPacket;
        public event RecivedNewMessage NewPacket
        {
            add { newPacket += value; }
            remove { newPacket -= value; }
        }
Вот я подписываюсь на событие и запускаю метод в отдельном потоке
C#
1
2
3
4
                 reciveClient.NewPacket += messageQueue.Dequeue;
 
                 Thread recived = new Thread(() => reciveClient.Recived());
                 recived.Start();
Событие происходит, но как видно по заголовку, я не знаю как вернуть значение выбранной функции.

1. Как мне получить возвращаемое значение при возникновении события
2. Как мне дождаться возникновения события в течении заданного времени и в зависимости от того произойдет или нет событие за данное время сделать другие шаги алгоритма.(Желательно пока на кошках, синхронно).

Добавлено через 53 минуты
Остался только один вопрос как в течении времени узнать произошло ли событие или нет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.03.2018, 17:15
Ответы с готовыми решениями:

При возникновении события DocumentCompleted в WebBrowser возвратить в нужный метод DocumentText
private WebBrowser wb; private void CreateWb() { wb = new WebBrowser {ScriptErrorsSuppressed = false}; wb.DocumentCompleted +=...

Клик по кнопке при возникновении события
Здравствуйте! Есть скрипт: $(function() { $("#carousel").swipe( { swipeLeft:leftSwipe, swipeRight:rightSwipe, ...

Вызов функции при возникновении события
Здравствуйте! Я совсем новичок в JS, так что простите некоторую тупость. Мне нужно, чтобы в момент нажатия клавиши 'Enter', у меня...

13
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
28.03.2018, 17:19
Диалоговые окна

Здесь в параметре события строку передаю
0
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
28.03.2018, 17:22  [ТС]
Эм, спасибо, но не понял?
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
28.03.2018, 17:25
Цитата Сообщение от BaredJJ Посмотреть сообщение
Эм, спасибо, но не понял?
C#
1
2
3
4
/// <summary>
/// 
/// </summary>
public event EventHandler<string> Ok = (s, o) => { };
В параметре события передавать можно.

C#
1
Ok(this, "Ля-Ля-Ля");
0
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
28.03.2018, 17:33  [ТС]
Простите, вы очень многословны))) Давайте теперь как чайнику, а то я что то все же не понимаю. Как я могу в методе подождать через какое время произойдет событие?
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
28.03.2018, 17:34
BaredJJ, стоп, может я не так понял) Вы что хотите сделать?
0
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
28.03.2018, 17:39  [ТС]
С возвращаемым значением я разобрался. Но у меня стоит задача, остановить поток или послать новое сообщение на обработку в течении определенного времени. Соответственно, мне нужно как то узнать произошло ли событие и если нет, то повторно попробовать отправить или закрыть поток, а если пришло, то отправить следующее сообщение. Проблема в том, как мне понять произошло ли событие или нет?
Я пока, что так подумал и надумал, что нужен таймер для начала. Ну и в событии можно поставить какой нибудь флаг или есть варианты поизящней?
0
28.03.2018, 17:41

Не по теме:

Цитата Сообщение от BaredJJ Посмотреть сообщение
Простите, вы очень многословны
Ну я тогда лучше мимо пройду, ибо есть что сказать! :)

0
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
28.03.2018, 17:44  [ТС]
Вообще наверное лучше даже, чтобы был не флаг, а оповещение, что событие произошло, так как неизвестно сколько раз оно должно произойти.

Добавлено через 36 секунд
Цитата Сообщение от kolorotur Посмотреть сообщение

Не по теме:


Ну я тогда лучше мимо пройду, ибо есть что сказать! :)

Ну так не томите же, говорите)
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
28.03.2018, 17:44
Ну так обработчик сработает - значит событие произошло.
0
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
28.03.2018, 17:45  [ТС]
Это я понимаю) но как мне из другого метода узнать. что он сработал?
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
28.03.2018, 17:49
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
27
// Здесь сразу сделаем пустое, что бы не проверять на null
public event EventHandler<string> Yes = (s, o) => { };
 
 
// Сам метод
void Mtd()
{
    // Просто перебор
    for (int i = 0; i < 10; i++)
    {
        // Ждем (для демонстрации), что бы не мгновенно
        Thread.Sleep(500);
 
        // Если i = 5 событие сработает
        if (i == 5) { Yes(this, "i = 5"); }
    }
}
 
 
// Выполним метод в отдельном потоке
Thread th       = new Thread(() => Mtd());
th.IsBackground = true;
th.Start();
 
 
// Подписываемся на событие (при его сработки вывод в консоль параметра o в котором мы передаем "i = 5")
Yes += (s, o) => { Console.WriteLine(o); };
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
28.03.2018, 17:50
подписаться на это событие?
0
 Аватар для BaredJJ
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
28.03.2018, 18:49  [ТС]
Ну а как мне в третьем методе узнать что обработчик сработал? Событие, то срабатывает, а сторонний метод не знает, произошло оно или нет.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public event EventHandler<RecivedEventArgs> NewPacketEventArgs;
 
        public void Recived()
        {
            stopRecived = false;
            client = new UdpClient(_port);
            RecievedData data = new RecievedData();
            IPEndPoint endPoint = null;
            while (!stopRecived)
            {
                data.buffer = client.Receive(ref endPoint);
                RecivedPacket packet = new RecivedPacket(data);
                if (IsCorrectReciveOpCode(packet.OpCode.ToString()) || !IsCorrectOpCode(packet.OpCode.ToString()))
                {
                    NewPacketEventArgs(this, new RecivedEventArgs(endPoint, packet, data));
                }
            }
            client.Close();
        }
Я подписался и запускаю обработчик в отдельном потоке
C#
1
2
3
                 reciveClient.NewPacketEventArgs += Tod;
                 Thread recived = new Thread(() => reciveClient.Recived());
                 recived.Start();
А вот я отправляю пакет и вот здесь, третьем методе, мне и нужно знать отправлять ли еще, что то или отправлять повторно или все еще принимать данные
C#
1
2
                 byte[] message = new ArtNetBuilder.AllPackets.Poll().ToArray();
                 udpClient.AskAll(message, IPAddress.Parse("2.161.2.2"), IPAddress.Parse("255.0.0.0"));
Вот в чем вопросик)

Добавлено через 7 минут
Или я туповат? Не понимаю чего? ))) или мы реально про разное? Я просто решения не увидел.

Добавлено через 43 минуты
Решил пока проблему stopwatch если кому интересно. Не очень хорошо, но пока работает. Потом может, что лучше придумаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2018, 18:49
Помогаю со студенческими работами здесь

Получение типа возвращаемого методом значения
Есть некий класс, в классе есть метод возвращающий значение типа T. Можно ли как-то получить это самое T? Пробовал decltype, он требует...

Можно ли в Access выполнить какие-то действия при возникновении события "Новая запись"?
Господа программисты! Помогите решить проблемку. Мне необходимо в форме при создании новой записи в поле korpus_id записать число....

Можно ли при декларации API функций менять тип возвращаемого значения?
Всем здравствуйте. Часто при объявлении API функций возвращаемое значение Boolean меняют на Integer. Declare Function SetCommState Lib...

<method name> is not a member of <class> при любом типе возвращаемого значения, кроме int
Проблема в следующем, есть класс описанный в .h файле, методы класса описаны в .cpp, при компиляции ошибка: BMPImage.cpp(3): E2316...

Получение свойств объекта при обработке события
Я чуток умею работать на VB.Net, сейчас хочу попытаться изучить C# - и сразу тормоза! Делаю общий обработчик события на...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru