触摸操作在Windows Phone 7.1(芒果)中冻结我的udp发送

时间:2011-08-02 20:11:07

标签: .net sockets windows-phone-7 udp windows-phone-7.1

我对Windows Phone 7.1 API有一个奇怪的问题。我试图编写一个应用程序,从触摸屏发送触摸三角形,在桌面电脑上移动鼠标指针。我使用UDP套接字,但我有一些性能问题。

发送udp消息似乎每0.5秒左右冻结0.5-1.0秒。我没有发送大量的数据,我也限制它。我最近试图找到导致它的原因有点出乎意料。

当一个单独的线程与while循环一起发送随机数据时,一切都顺利和精细。但是当我开始触摸WP7-mobile的屏幕时,我开始得到这些奇怪的打嗝。为了调试目的,我已经删除了触摸事件上的所有监听器,我在我的应用程序中没有做任何其他事情,然后在UDP套接字上发送此数据。但是当我将手指移到屏幕上时,为什么会像这样冻结?它有点像写这样的应用程序。

我听说应该将触摸操作移到专用线程,是否包含在WP7.1的Beta2刷新中?

代码有点像这样:

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

SendToAsync完成后设置事件句柄。所以它每隔5毫秒就会继续发送udp数据。只要我不在手机的屏幕上触摸并拖动手指,它就可以正常工作(我可以稳定快速地接收)。然后我开始定期获得1秒的冻结。非常奇怪,因为我在一个单独的线程上运行udp-firing。处理操作时手机的CPU是否以某种方式过载?这会导致打嗝吗?


更新

我已经在另一个帖子中反驳并更新了这个问题,以使其更清晰:

Poor UDP performance with Windows Phone 7.1 (Mango)

1 个答案:

答案 0 :(得分:1)

所有内容都在UI线程上运行,直到您将其推送到另一个线程。我的大多数事件处理程序都是这样的

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

我有Mango b2并且确实有些东西已被移出UI线程,但这是不稳定的,并且很容易自己做。