Как реализовать уведомление для приложения Windows, используя .NET - PullRequest
3 голосов
/ 18 февраля 2010

Я должен реализовать приложение на основе клиент-сервер, где клиент - приложение для Windows. Теперь я планирую создать веб-сервис в качестве серверного приложения и использовать его в нашем клиентском приложении. Но проблема в уведомлении. Для этого мне нужно добавить таймер в клиентское приложение для проверки уведомлений. Это замедляет работу клиентского приложения.

Каков наилучший подход для этого?

Мне нужно создать настройки для обоих приложений. Таким образом, решение должно быть способным к развертыванию.

Редактировать: я не могу установить таймер в фоновом режиме или в отдельном потоке, потому что мне нужно немедленно обновить представление данных.

Ответы [ 5 ]

1 голос
/ 18 февраля 2010

Используйте BackgroundWorker или Threadpool.QueueUserWorkItem для вызовов веб-службы, а затем обновите графический интерфейс.Ваше приложение замедляется, потому что вы вызываете веб-сервис из основного потока пользовательского интерфейса, поэтому ваше приложение не может обрабатывать другие события, пока не завершится вызов веб-сервиса, который включает перерисовку, изменение размера, щелчки ...

См. Этот документ: http://msdn.microsoft.com/en-us/library/ms951089.aspx

Хотите обновить немедленно, вызвав удаленный ресурс?Боюсь, что это невозможно, если мы не сбросим один из законов термодинамики и не допустим путешествий во времени.

НО вы можете обманывать и предварительно выбирать ваши данные и связывать их за кулисамикаждые XXX секунды.

Не забудьте использовать BeginUpdate и EndUpdate при обновлении сетки, чтобы не было мерцания.

0 голосов
/ 18 февраля 2010

Предложения по проверке другого потока верны, даже если вам нужно обновить свой пользовательский интерфейс с результатами. Просто убедитесь, что вы используете свойство InvokeRequired и метод BeginInvoke в вашей форме. BeginInvoke отправит вызов в поток пользовательского интерфейса. См. Что случилось с BeginInvoke? для более полного объяснения с примером кода. Также, как сказал Флориан Дойон, не забудьте использовать BeginUpdate и EndUpdate в вашем DataGridView.

0 голосов
/ 18 февраля 2010

что вы делаете, чтобы «проверить уведомления»? Это может быть глупым предложением, но запуск нового потока для этого может уменьшить попадание в клиентское приложение?

0 голосов
/ 18 февраля 2010

Если вы используете WCF, вам может потребоваться Дуплексные услуги

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

, чтобы избежать проблем с таймером.

Некоторые ссылки заслуживают внимания

0 голосов
/ 18 февраля 2010

Под «созданием веб-сервиса как серверного приложения и использованием его в нашем клиентском приложении» я предполагаю, что вы имеете в виду, что вы собираетесь получать доступ к веб-сервису через прокси , а не размещаете веб-сервис ваше клиентское приложение.

Запускаете ли вы свой таймер в фоновом потоке? У меня складывается впечатление, что вы используете таймер для опроса веб-сервиса, и он связывает ваш пользовательский интерфейс, вызывая замедление (конечно, есть и другие факторы, которые следует учитывать, но это тот, который мне кажется наиболее вероятным в то время ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...