Манипуляция касанием останавливает мою отправку udp в Windows Phone 7.1 (Mango) - PullRequest
1 голос
/ 03 августа 2011

У меня странная проблема с Windows Phone 7.1 API.Я пытаюсь написать приложение для отправки Touch-Delta с сенсорного экрана для перемещения указателя мыши на настольном ПК.Я использую UDP-сокеты, но у меня есть некоторые проблемы с производительностью.

Отправка udp-сообщений, кажется, останавливается на 0,5-1,0 секунды каждые ~ 0,5 секунды или около того.Я не отправляю огромные объемы данных, и я тоже их регулирую.Моя последняя попытка найти причину оказалась неожиданной.

При наличии отдельного потока с циклом while, который продолжает посылать случайные данные, все работает гладко и нормально.Но когда я начинаю касаться экрана WP7-мобиля, у меня появляются странные икоты.Я удалил всех слушателей на событиях касания для целей отладки, и я больше ничего не делаю в своем приложении, затем отправляю эти данные на UDP-сокет.Но почему так зависает, когда я провожу пальцем по экрану?Это делает невозможным создание такого приложения.

Я слышал, что манипуляция касанием должна быть перенесена в специальный поток, это включено в обновление Beta2 WP7.1?

Код выглядит примерно так:

    new Thread(() =>
    {
        while (true)
        {
            _event.Reset();
            _socket.SendToAsync(_args);
            _event.WaitOne();
            Thread.Sleep(5);
        }
    }).Start();

Дескриптор события устанавливается при завершении SendToAsync.Таким образом, он отправляет данные udp каждые 5 мс.Он работает нормально (я могу получать с постоянной и быстрой скоростью), пока я не касаюсь и не перетаскиваю палец на экране телефона.Затем я начинаю получать заморозки на 1 секунду через равные промежутки времени.Очень странно, так как я запускаю UDP-стрельбу в отдельном потоке.Не перегружен ли процессор телефона при манипуляциях с его обработкой?Может ли это быть причиной икоты?


Обновление

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

Низкая производительность UDP с Windows Phone 7.1 (Mango)

1 Ответ

1 голос
/ 03 августа 2011

Все работает в потоке пользовательского интерфейса, пока вы не отправите его в другой поток. Большинство моих обработчиков событий выглядят так

ThreadPool.QueueUserWorkItem(state => /* do stuff */);

У меня есть Mango b2, и правда, что некоторые вещи были удалены из потока пользовательского интерфейса, но это странно, и это легко сделать самостоятельно.

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