Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57

Выполнение кода в фоне

22.04.2015, 19:38. Показов 2111. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос нубский, но я не понимаю, что можно сделать.
Есть пример Subscribe to Events in an Event Log
В этом примере есть код:
C#
1
2
3
4
5
for (int i = 0; i < 5; i++)
{
   // Wait for events to occur. 
   System.Threading.Thread.Sleep(1000);
}
Здесь мы ждем, пока в журнале появятся новые события.
Как в WPF реализовать подобный код, который будет выполнять мониторинг постоянно.
Я могу написать
while (!Cancelled){...}
но по-моему это просто нагрузка на процессор. Наверняка есть какой-то другой метод, причем без использования Backgroundworker. Может что-то на основе событий...

Help plz ))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2015, 19:38
Ответы с готовыми решениями:

Как преждевременно закрыть соединение?(Выполнение в фоне)
Vk api отправляет мне callback запрос и даёт 10 секунд на ответ и иногда мой скрипт не успевает ответить, так как идут очень трудоемкие...

Как ускорить выполнение кода? (Получение цвета пикселя, сравнение и выполнение действия)
Всем привет. Нужна консультация экспертов) Программа такая. Есть пиксель на экране, в нем то появляется яркий цвет, то темный (лампочка...

Реализовать выполнение метода в фоне до тех пор пока не нажата кнопка стоп
Здравствуйте) Подскажите пожалуйста какой класс использовать для создания потока или может есть еще какой-то вариант. Нужно чтобы метод...

7
Фрилансер
 Аватар для goodniko
58 / 48 / 14
Регистрация: 13.12.2013
Сообщений: 373
22.04.2015, 19:53
можно как вариант использовать timer, где каждый шаг (к примеру 1 секунда) будет проходить проверка в виде if.
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.04.2015, 20:37
CSharp_user, других вариантов нет. Или потоки (в любом варианте), или таймер (что опять же неявно возвращает нас к пулу потоков).
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
22.04.2015, 23:12
Лучший ответ Сообщение было отмечено CSharp_user как решение

Решение

Цитата Сообщение от CSharp_user Посмотреть сообщение
Вопрос нубский, но я не понимаю, что можно сделать.
Есть пример Subscribe to Events in an Event Log
В этом примере есть код:
C#
1
2
3
4
5
for (int i = 0; i < 5; i++)
{
   // Wait for events to occur. 
   System.Threading.Thread.Sleep(1000);
}
Здесь мы ждем, пока в журнале появятся новые события.
Как в WPF реализовать подобный код, который будет выполнять мониторинг постоянно.
Я могу написать
while (!Cancelled){...}
но по-моему это просто нагрузка на процессор. Наверняка есть какой-то другой метод, причем без использования Backgroundworker. Может что-то на основе событий...

Help plz ))
В примере - консольное приложение. Поэтому там нужен цикл ожидания. В WPF приложении Вам такой код не потребуется, поскольку цикл ожидания в нём уже (неявно) присутствует.

Начинаем ждать: код из блока try, кроме цикла
Перестаём ждать: код из блока finaly
Дождались: метод EventLogEventRead()
1
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57
23.04.2015, 12:53  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Начинаем ждать: код из блока try, кроме цикла
Перестаём ждать: код из блока finaly
Дождались: метод EventLogEventRead()
Где все это писать? MainWindow.xaml.cs? После InitializeComponent()?

Добавлено через 24 минуты
Этот код не работает (событие о неверной авторизации не ловится):
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
28
29
30
private void mnuSubscribeEvent_Click(object sender, RoutedEventArgs e)
{
  HistoryItem selectedItem = (HistoryItem)listViewHistory.SelectedItem;
  GenerateSubscriptionFilter(selectedItem.Path);
  EventLogWatcher watcher = null;
  try
  {
      EventLogQuery subscriptionQuery = new EventLogQuery(
          "Security", PathType.LogName, "*[System/Level=0]");
 
      watcher = new EventLogWatcher(subscriptionQuery);
 
      watcher.EventRecordWritten +=
          new EventHandler<EventRecordWrittenEventArgs>(
              EventLogEventRead);
 
      watcher.Enabled = true;
  }
  catch (EventLogReadingException error)
  {
      MessageBox.Show("Error reading the log", error.Message);
  }
  // Stop listening to events
  watcher.Enabled = false;
 
  if (watcher != null)
  {
      watcher.Dispose();
  }
}
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
23.04.2015, 12:56
Я не знаю, в какой момент Вам надо начать/перестать следить за событиями. Если по нажатию кнопки - то поместите в onclick кнопки. Если сразу, то в onloaded окна.

Можно для начала сделать две кнопки - "старт" и "стоп", чтобы убедиться, что работает. А потом уже дальше решать.

Метод EventLogEventRead() просто копируете целиком, чтобы он был.
0
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57
23.04.2015, 12:57  [ТС]
Разобрался.
Проблема была в том, что я сразу же отключал Watcher, хотя нужно было это делать где-нибудь в другом месте. Например по нажатию кнопки. В общем, если удалить строки
Цитата Сообщение от CSharp_user Посмотреть сообщение
C#
1
2
3
4
5
6
// Stop listening to events 
watcher.Enabled = false; 
if (watcher != null) 
{ 
  watcher.Dispose(); 
}
То все будет работать
Еще раз спасибо!
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
23.04.2015, 13:04
Цитата Сообщение от CSharp_user Посмотреть сообщение
Этот код не работает (событие о неверной авторизации не ловится):
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
28
29
30
private void mnuSubscribeEvent_Click(object sender, RoutedEventArgs e)
{
  HistoryItem selectedItem = (HistoryItem)listViewHistory.SelectedItem;
  GenerateSubscriptionFilter(selectedItem.Path);
  EventLogWatcher watcher = null;
  try
  {
      EventLogQuery subscriptionQuery = new EventLogQuery(
          "Security", PathType.LogName, "*[System/Level=0]");
 
      watcher = new EventLogWatcher(subscriptionQuery);
 
      watcher.EventRecordWritten +=
          new EventHandler<EventRecordWrittenEventArgs>(
              EventLogEventRead);
 
      watcher.Enabled = true;
  }
  catch (EventLogReadingException error)
  {
      MessageBox.Show("Error reading the log", error.Message);
  }
  // Stop listening to events
  watcher.Enabled = false;
 
  if (watcher != null)
  {
      watcher.Dispose();
  }
}
Разумеется. Ведь вы начинаете слушать (строки 8-17) и тут же прекращаете (строки 23-29).
Перенесите строки 23-29 в обработчик другой кнопки.

Добавлено через 4 минуты
Цитата Сообщение от CSharp_user Посмотреть сообщение
Разобрался.
Проблема была в том, что я сразу же отключал Watcher, хотя нужно было это делать где-нибудь в другом месте.
Да!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2015, 13:04
Помогаю со студенческими работами здесь

Пример кода отправка и прием данных по bluetooth в сервисе, в фоне
Есть задача соединение по bluetooth в сервисе, прием и передача данных. В интернете есть примеры реализации соединения по bluetooth, но они...

Выполнение кода
На одном из сайтов прочитал, что в .NET программах невозможно выполнение кода в хипах и в стеке. Как в .NET происходит вызов методов и...

Выполнение JS кода в С++
Нужно авторизоваться на сайте, но требуются куки, получаются они тут, как выполнить код, чтобы получить куки? ;eval(...

Выполнение кода
Как без командных строк компилировать java код? Слышал есть класс для компиляции java на лету.

Повторное выполнение кода
Только на прошлом уроке прошли 3 цикла, сказали сделать задачу-Дан числовой ряд a-b(от а до б),пользователь вводит кол-во элементов...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru