C# Вопрос к умельцам

Lemurian
На сайте с 14.10.2010
Offline
24
596

Здравствуйте. Хотел бы попросить помощи в одной проблеме. Не знал куда засунуть эту тему, поэтому засунул сюда.

У меня есть обычная, самая простая форма с одной кнопкой (допустим).

Текст на этой кнопке изменяет удаленный компьютер (через какой-то неизвестный нам промежуток времени). И в это же время текст на ней может изменять пользователь с локального компьютера (просто кликая по ней).

Почему когда удаленный компьютер изменяет текст на кнопке, в это время локальный пользователь не может по ней кликнуть? Форма просто висит, а когда жмешь на кнопку, ничего не происходит.

Как я понял, поток формы просто занят одной задачей и вторую он выполнить не в состоянии. Может подскажите, как сделать очередь заданий (для формы)?

R
На сайте с 17.11.2011
Offline
22
#1

имеется в виду что-то наподобие teamview?

Очевидно temview блокирует мышу на локалке, когда идут удаленные команды.

А вообще-то вопрос туманен.

домашняя страница - google.com.ua
mr-faq
На сайте с 03.09.2007
Offline
114
#2

Очевидно, действие по кнопке не просто меняет название а делает еще что-то серьезное, из-за чего заметна эта задержка? Так вот засуньте это серьезное в отдельный тред.

Покупаю и продаю сайты только здесь (http://www.telderi.ru/?pid=270de4)
I
На сайте с 23.12.2010
Offline
25
#3
Lemurian:
Почему когда удаленный компьютер изменяет текст на кнопке, в это время локальный пользователь не может по ней кликнуть? Форма просто висит, а когда жмешь на кнопку, ничего не происходит.

Как я понял, поток формы просто занят одной задачей и вторую он выполнить не в состоянии. Может подскажите, как сделать очередь заданий (для формы)?

поток висит и ждет пока удаленный компьютер что-то ему скажет.

два варианта

а) использовать неблокирующие сокеты

б) создать отдельный поток для слушания удаленного компьютера

V
На сайте с 05.01.2011
Offline
23
#4

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

SD
На сайте с 08.12.2011
Offline
5
#5

Как я понимаю речь идет о Windows.Forms. У формы есть один и только один UI поток и если кто-то меняет что-то поток соответственно блокируется и форма "подвисает", т.е. перестает обрабатывать сообщения. Чтобы этого избежать можно вызывать метод ProcessMessages, который принудительно заставляет формы обрабатывать входящие сообщения. Если мы говорим о синхронизации нескольких потоков, которые могут менять состояние окна, то логично организовать стек вызовов дабы избежать конфликтов.

З.Ы. я создал тему по .net вот тут: /ru/forum/677899

Если что - обращайтесь.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий