Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Titkoff
1 / 1 / 1
Регистрация: 14.11.2012
Сообщений: 42

Как вынесли выполнение определенного кода в отдельный поток

23.12.2012, 02:11. Показов 1475. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
у меня есть функция Draw(), которая занимает очень много процессорного времени и вызывается на событиях PicBox_MouseMove, PicBox_MouseUp, а также на ресайзе и ещё кое-где. Я хочу поместить её в отдельный поток, чтобы форма не подвисала. Как мне это сделать?

Добавлено через 6 часов 28 минут
Хорошо, скажите мне, можно сделать объект потока глобальной переменной, или в каждом методе или событии мне придётся его описывать заново? И, самое главное, если можно, то как?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2012, 02:11
Ответы с готовыми решениями:

Отдельный поток, выполнение перегруженной функции
Мне необходимо выполнить функцию в отдельном потоке public static void updateicon(NotifyIcon notify) { ...

Как сделать выполнение определенной части кода python, при вводе определенного значения
Как сделать выполнение определенной части кода python, при вводе определенного значения Нужно, чтобы было примерно так: После запуска...

Выполнение определенного участка кода по условию
Здравствуйте у меня такая проблема... У меня есть вот такой код на Form_KeyUp: if (e.KeyCode == Keys.Space) { ...

3
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
23.12.2012, 10:09
Рисование невозможно вынести в отдельный поток от того потока, в котором создан контрол.

Возможные решения:

1. Оптимизировать прорисовку;
2. Вынести часть прорисовки в отдельный поток, например готовить готовое изображение, а уже его потом рисовать одной-единственной функцией;
3. Вынести основную логику проекта в отдельный от основного (рисования) поток.

Я подозреваю, что проблема именно в оптимизации, так что код в студию.
0
 Аватар для Titkoff
1 / 1 / 1
Регистрация: 14.11.2012
Сообщений: 42
23.12.2012, 15:45  [ТС]
Код пока ещё не готов, он будет рисовать линии уровня некоторой функции, причём та реализачия, которой придерживаюсь я, действительно объёмная. как только заставлю его работать - выложу

Добавлено через 1 час 32 минуты
Может, кто-нибудь знает какой-нибудь способ рисования этих линий уровня? я уже спрашивал это в другой теме, но там никто не ответил. Я придумал два способа: или перебирать все пикселы PicBox'а и проверять значение функции в каждой на равенство с одним из значений линий уровня, и в случае успеха делать SetPixel, или по значению функции, равному одному из значений линий уровня, вычислять соответствующие точки. Оба метода - очень громоздкие и неэффективные, поэтому я и хотел их запоточить.
0
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
23.12.2012, 20:00
В отдельный поток можно вынести вычисления. А уже из результат можно использовать для прорисовки.
Фактически, вы можете сделать рисование графика в отдельном потоке на Bitmap, а потом на контрол рисовать полученный Btimap (Graphics.DrawImage())

Добавлено через 1 минуту
Но этот способ кажется мне "неправильным". Желательно оптимизировать алгоритм (с ним я помочь не могу), что рисование успевало выполниться в основном потоке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2012, 20:00
Помогаю со студенческими работами здесь

Периодическое выполнение определенного кода в программе с задержкой
Кто подскажет, возможно ли создать программу, которая с определённой частотой (скажем, раз в секунду) делает что-то простое (скажем,...

Выполнение определенного куска кода с задержкой в секунду
Привет, как мне сделать такое есть страница index.php в ней есть произвольный код пхп который выпорняется сверху вниз ...

Выполнение определенного кода через определенный интервал времени
Народ, подскажите как сделать автообновление этого кода через (скажем) 5 - 10 секунд Private Sub Form1_Load(sender As...

Выполнение определенного кода перед нажатием на кнопку и после него (для всех кнопок)
задача такая : к событию on_click кнопки добавить вот такую конструкцию btn.enabled := false; //код btn.enabled := true; не охото...

Как запустить отдельный поток
Как запустить часть кода в отдельном потоке. Пробовал так: public void func (){ this.Invoke((MethodInvoker)delegate(){ ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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