我正在开发一个适用于 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 中)
由于几天来我没有发现其他方法,我的问题是:如何解决这个问题?
谢谢,
克里斯托夫