![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| L0tR |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.2.2009 Где: Москва (Любецы) Репутация: нет Всего: нет |
Лазил по MSDN в поисках решения одной задачки и пока понял, что мне нужно работать с Dispatcher.
Прогу пишу как Windows Forms App, но оказалось, что там нету поддержки Dispatcher и в целом пространства имён System.Windows.Threading. Я добавил вручную библиотеку WindowsBase.dll, и возможность создавать объекты Dispatcher, собственно, появилась)) Но они должны использоваться, как свойства других объектов, например, контролов формы, а это, разумеется, возможным не стало. Неужели под Windows Forms нету поддержки Dispatcher?? Если и правда так, то сформулирую саму проблему. Нужно реализовать перетаскивание рисунка мышью. То есть по событию MouseMove нужно вызывать метод, содержащий перерисовку. Но этот метод должен выполняться в отдельном потоке. То есть и ловить событие, и выполнять метод нужно в отдельном потоке. Я нашёл способ это делать только с помощью Dispatcher. Уверен, что такая простая вещь решается в Win Forms)) Подскажите, чем это реализовывать) |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
винформс - это намесмейс System.Windows.Forms, а не System.Windows (System.Windows относится к WPF. И эта путаница - благодаря разработчикам WPF за недостаток воображения когда они свои намеспейсы придумывали)
Вам нужно в винформс работать через метод Invoke формы или отдельного контрола. метод Control.Invoke() свойство Control.InvokeRequired компонент System.ComponentModel.BackgroundWorker Забудьте про Dispatcher вообще -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| L0tR |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.2.2009 Где: Москва (Любецы) Репутация: нет Всего: нет |
Да, я и написал о том, что вроде как Dispatcher определён только в WPF...
Понятно, забыл про Dispatcher, ушёл читать про BackgroundWorker Спасибо) Наверняка будут появляться ещё вопросы... буду тогда постить) |
|||
|
||||
| L0tR |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.2.2009 Где: Москва (Любецы) Репутация: нет Всего: нет |
Я нашёл способ обойтись простыми семафорами (ResetEvent)
Теперь следующая проблема: Рисунок может перемещаться мышью, но ещё надо ограничить частоту отрисовки, например, 60 Гц. Я сделал отдельный поток, который каждую 1/60 секунды включает семафор:
А поток, который делает отрисовку ждёт зелёного:
Для проверки добавил счётчик fps, и получается, как и надо, 60 (+-2 кадра). Монитор на моём ноуте - 60 Гц, то есть разницы, если убрать ограничение fps, не должно быть видно. Но если его нет, то рисунок перемещается практически синхронно с мышкой, а если есть, то появляются явные (хоть и не сильные) задержки, и иногда мелькание. fps при этом выдаёт около 110 (получается, фиксируется 110 движений мышкой в секунду). Может дело в том, что не все из 60 кадров выводятся на монитор, так как частота обновления в проге ни с чем не синхронизирована) Что делать?) UP Попробовал запустить прогу под XP - проц грузит, как и в 7, на 2-15%, но fps показывает 50 Чувтсвуется, тут нужно какое-то принципиально другое решение... подскажите плз) Не хочу заставлять комп делать лишнюю работу, учитывая, что графика потом будет сложней и, может, будет приводить к полной загрузке процессора. Это сообщение отредактировал(а) L0tR - 24.12.2009, 01:59 |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |