|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.09.2015, 14:35 | #1 |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цикл обработки сообщений в WPF
Создал кнопку и поле редактирование на форме. к кнопке добавил обработчик в котором в цикле выводится в поле редактирование значения. Но у меня виснет программа, как добавить в цикл for цикл обработки сообщений windows???
Код:
|
29.09.2015, 14:43 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Дык если надо чтоб не висло, то надо создать новый поток. (независимо WPF ли это или Дельфи)
В C# это делается относительно просто, особенно с async/await в .NET 4.5+. Ну или обычный Task из 4.0+. Более низкоуровневый вариант — Thread.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
29.09.2015, 14:46 | #3 | |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
Должно в одном работать, нужно сообщения виндовс обрабатывать в цикле и все. Поток создавать это один из вариантов, его позже попробую. Последний раз редактировалось ninja2; 29.09.2015 в 14:50. |
|
29.09.2015, 14:53 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Надо ж не только посмотреть, но и достать/обработать.
В Дельфи подобное делается функцией ProcessMessages, а в виформс DoEvents. В WPF нет такой простой функции (и вряд ли это сделано непреднамеренно), но немного более сложно наверно можно это сделать. https://www.google.com/search?q=wpf+doevents+equivalent Но даже если есть, обычно их использование для решения подобной задачи — плохой вариант, в любом ЯП/библиотеке. Используйте потоки. Ну и вообще я ж писал в предыдущей теме http://programmersforum.ru/showpost....1&postcount=14, что WPF это не Дельфи/MFC/WinForms. На нем можно пытаться писать как перечисленном, но смысла мало, проще винформс тогда и взять. Надо почитать нормальную книжку по WPF сначала, разобраться с его основными фишками (+ общее из .NET типа потоков, синхронизации, структур данных).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 29.09.2015 в 15:11. |
29.09.2015, 15:14 | #5 | |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
Вычитал что в WPF такой функции нету, что можно подключать функцию из windowsform, а как ее вызвать. Делаю так. Код:
|
|
29.09.2015, 15:21 | #6 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Надо библиотеку подключить (в References в Solution explorer'е), но вряд ли оно будет работать, читайте дальше.
А Silverlight это ж типа флеша, оно мало кому нужно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
29.09.2015, 18:41 | #7 | |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
пот код кнопки по которому создается поток. Код:
Нада еще что то типо таймера создать. Последний раз редактировалось ninja2; 29.09.2015 в 18:49. |
|
29.09.2015, 19:11 | #8 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну погуглить/почитать и использовать.
Task удобнее/высокоуровневее, чем Thread. К элементам UI нельзя напрямую без синхронизации обращаться из потока. Пример с просто выводом чисел как тут я вроде недавно писал в этой теме (еще и с async/await) http://programmersforum.ru/showthread.php?t=282538
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
29.09.2015, 19:19 | #9 | |
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
|
Цитата:
Я пробовал из потоковой функции обратится к taskBox.Text="что то" и вылазит ошибка. Это так нельзя обращаться из потока. Нужно член класса создать и ему что то присваивать. Только нужно блокировку потока как то сделать. Щас попробую. С таймерами разобрался, там просто создаются. |
|
29.09.2015, 19:32 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну нельзя "просто взять и" писать многопоточный код, надо теорию почитать. Независимо от языка.
Про синхронизацию самый простой вариант это например Application.Current.Dispatcher.Invo ke или BeginInvoke. Более красивые варианты — IProgress<T> как по ссылке выше.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[C# + WPF] Отлов нажатий клавиш, хуки, горячие клавиши в проекте WPF | Casper-SC | WPF, UWP, WinRT, XAML | 3 | 03.03.2017 15:00 |
Условие обработки сообщений. GPSS | JavScr | Помощь студентам | 0 | 17.05.2014 23:59 |
QT - цикл обработки событий. | Базиля | Помощь студентам | 6 | 25.10.2013 16:54 |
класс Screen в WPF. Есть ли такой? [?] Не добавлять же сборку Forms в WPF | Casper-SC | Общие вопросы .NET | 2 | 30.07.2010 15:10 |
Функция обработки сообщений | VVVadim | Win Api | 2 | 08.12.2008 20:46 |