2

我正在开发一个适用于 Windows CE 6 的程序,该程序由 Visual Studio 2008 解决方案中的两个项目组成,用 VB.Net 编写。之前,我为 Windows 桌面写了一个类似的程序,所以我想尝试尽可能多地重用代码。

通用结构是:第一个项目包含前端 gui,第二个是用于串行通信的库。这个库应该可以被其他 GUI 重用,并且不能依赖于图形的东西,例如Control .

在第二个库项目中,我使用了一个SerialPort实例,数据的接收是通过SerialPort.DataReceived事件处理的。正如DataReceived在第二个线程中发生的那样,我SynchronizationContext桌面变体中使用,Invoke不能不依赖图形内容。下面是一个简单的例子:

公共课堂交流
    私有 dllContext 作为 SynchronizationContext
    私有端口作为 SerialPort

    公共子新()
        dllContext = SynchronizationContext.Current
        端口 = 新串行端口(“COM1”)
    结束子

    Public Sub port_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) 处理 port.DataReceived
        将数据(-1)暗淡为字节

        '         
        ' 将接收到的数据读入数据变量。
        '

        如果 (dllContext IsNot Nothing) 那么
            dllContext.Send(Sub() RaiseEvent DataReceived(Me, data), Nothing)
        别的
            RaiseEvent DataReceived(我,数据)
        万一
    结束子
结束类

将此代码移植到 .Net CF 时,没有SynchronizationContext可用的。我在网上搜索,找到了这些: http ://www.planetgeek.ch/2009/02/03/part-i-mimic-synchronizationcontext-behaviour-on-net-cf/ http://www.planetgeek.ch /2009/02/15/part-ii-mimic-synchronizationcontext-behaviour-on-net-cf/ 但是作者正在使用我不想使用的 Control.Invoke(它在 System.Windows.Forms 中)

由于几天来我没有发现其他方法,我的问题是:如何解决这个问题?

谢谢,

克里斯托夫

4

0 回答 0