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