.NET CF插槽接收超时 [英] .NET CF Socket receive timeout

查看:174
本文介绍了.NET CF插槽接收超时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的一个应用程序为Windows CE 5.0,通过.NET CF 3.5 SP1。我想模拟接口接收超时,并写了一些codeS:

I'm working on an app for Windows CE 5.0 , by .NET CF 3.5 SP1. i wanna simulate socket receive timeout and wrote some codes :

    ...
    AutoResetEvent auto = new AutoResetEvent(false);
    mySocket.BeginReceiveFrom(arrData, 0, 4, SocketFlags.None, ref EP, new AsyncCallback(ReceiveCallback), mySocket);
//if (auto.WaitOne(10000,false)) or :
    if (auto.WaitOne())
    {
// program flow never comes here, even after setting signal!
    _log.AppendLine("Message receive success");
    }
    ...

这是我的回调方法:

and here's my callback method :

void ReceiveCallback(IAsyncResult ar)
        {

            bool b = ((EventWaitHandle)ar.AsyncWaitHandle).Set();
            _log.AppendLine(string.Format("AsyncWaitHandle.Set() called and returned {0}",b));

        }

我测试的应用程序,并记录一些信息,我马上接收数据和ar.AsyncWaitHandle.Set()返回true,但为什么程序流程永远不会结束?出了什么问题?

as i tested the app and logged some info, i receive data immediately and 'ar.AsyncWaitHandle.Set()' returns true, but why program flow never ends? what's wrong?

推荐答案

我要通过我的WaitHandle例如作为StateObject参数我,我以后可以访问它的回调方法BeginReceiveFrom方法创建的。我编辑我的code和它的作品了。其实,我认为互联网上的相关样本是如此软弱,太可怕了。

I should pass the WaitHandle i created for example as StateObject parameter to my BeginReceiveFrom method that i can access it later in callback method. i edited my code and it works now. in fact , i think the related samples on the Internet are so weak and terrible.

...
EventWaitHandle auto = new EventWaitHandle(false, EventResetMode.ManualReset);
auto.Reset();
mySocket.BeginReceiveFrom(arrData, 0, 4, SocketFlags.None, ref EP, new AsyncCallback(ReceiveCallback), auto);
if (auto.WaitOne(10000, false))
{
_log.AppendLine("Message lenght receive success");
}
...

void ReceiveCallback(IAsyncResult ar)
{

bool b = ((EventWaitHandle)ar.AsyncState).Set();
_log.AppendLine(string.Format("AsyncWaitHandle.Set() called and returned {0}",b));
}

这篇关于.NET CF插槽接收超时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆