您的位置:首页 > 运维架构

WinCE5.0移动平台开发笔记(OpenNETCF.Desktop.Communication连接和断开使用心得)

2010-03-20 08:27 656 查看
当用PC机读取和操作PDA时候,需要用到RAPI,那么为了更好的使用RAPI,我们会使用到OpenNETCF.Desktop.Communication.dll文件,这个文件在Rapi.dll(win32 api)的基础上进行了NET封装。我们更能方便的使用它。对于连接和断开移动设备的方法,在使用过程中出现了一点问题,这里将记录下来,和朋友们分享:

1、当我们首先实例化时:RAPI m_rapi = new RAPI();调用:m_rapi.Connect(false, 2).如果当PDA和PC没有连接成功时候,根据OpenNetCF.Desktop.Communication里面的方法,就会在子线程中抛出异常,主线程不能Catch获取子线程中异常,导致程序无法正常运行下去。相关代码如下:

代码

public partial class MainForm : Form
{
internal class MyEventArgs : EventArgs
{
public Control Target;
public string Text;
public MyEventArgs(Control target, string text)
{
Target = target;
Text = text;
}
}

private RAPI m_rapi = new RAPI();
private EventHandler statusUpdate;

public MainForm()
{
InitializeComponent();
m_rapi.RAPIConnected += new RAPIConnectedHandler(m_rapi_RAPIConnected);
m_rapi.RAPIDisconnected += new RAPIConnectedHandler(m_rapi_RAPIDisconnected);
m_rapi.ActiveSync.Listen += new ListenHandler(ActiveSync_Listen);
m_rapi.ActiveSync.Answer += new AnswerHandler(ActiveSync_Answer);
m_rapi.ThrowException += new ExceptionEventHandler(m_rapi_ThrowException);
statusUpdate = new EventHandler(StatusUpdate);
m_rapi.Connect(false, 2);
}

private void StatusUpdate(object sender, EventArgs args)
{
(sender as Label).Text = (args as MyEventArgs).Text;
}

void m_rapi_ThrowException(RAPIException e)
{
MessageBox.Show("连接超时!请确认把PDA和PC机连接好!");
}

void ActiveSync_Answer()
{
if (this.label1.InvokeRequired)
{
this.Invoke(statusUpdate, new object[] { this.label1, new MyEventArgs(this.label1, "连接状态:连接中...!") });
}
else
{
statusUpdate(this.label1, new MyEventArgs(this.label1, "连接状态:连接中...!"));
}
}

void ActiveSync_Listen()
{
if (this.label1.InvokeRequired)
{
this.Invoke(statusUpdate, new object[] { this.label1, new MyEventArgs(this.label1, "连接状态:设备未连接!") });
}
else
{
statusUpdate(this.label1, new MyEventArgs(this.label1, "连接状态:设备未连接!"));
}
}

void m_rapi_RAPIDisconnected()
{
if (this.label1.InvokeRequired)
{
this.Invoke(statusUpdate, new object[] { this.label1, new MyEventArgs(this.label1, "连接状态:连接关闭!") });
}
else
{
statusUpdate(this.label1, new MyEventArgs(this.label1, "连接状态:连接关闭!"));
}
}

void m_rapi_RAPIConnected()
{
if (this.label1.InvokeRequired)
{
this.Invoke(statusUpdate, new object[] { this.label1, new MyEventArgs(this.label1, "连接状态:设备已连接!") });
}
else
{
statusUpdate(this.label1, new MyEventArgs(this.label1, "连接状态:设备已连接!"));
}
}

private void MainForm_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
if (m_rapi.DeviceFileExists(@"\***\****.sdf"))
{
MessageBox.Show("文件存在!连接是成功的!");
}
else
{
MessageBox.Show("文件不存在!,连接不成功!");
}
}
}

通过demo发现,连接状态的变化过程:

1.连接pda时候:设备未连接---->连接中...----->设备已连接

2.断开pda上:设备已连接----->连接关闭------->设备未连接

Best Regards,

Charles Chen
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐