.Net Compact Framework:SynchronizationContext的替代方案
我正在为WindowsCE6开发一个程序,该程序由Visual Studio 2008解决方案中的两个项目组成,用VB.Net编写。以前,我为Windows桌面编写了一个类似的程序,因此我希望尽可能多地重用代码 通用结构是:第一个项目包含前端gui,第二个项目是用于串行通信的库。此库应可用于其他GUI,并且不得依赖于图形化内容,例如.Net Compact Framework:SynchronizationContext的替代方案,.net,compact-framework,synchronizationcontext,.net,Compact Framework,Synchronizationcontext,我正在为WindowsCE6开发一个程序,该程序由Visual Studio 2008解决方案中的两个项目组成,用VB.Net编写。以前,我为Windows桌面编写了一个类似的程序,因此我希望尽可能多地重用代码 通用结构是:第一个项目包含前端gui,第二个项目是用于串行通信的库。此库应可用于其他GUI,并且不得依赖于图形化内容,例如控件 在第二个库项目中,我使用了一个SerialPort-实例,通过SerialPort.DataReceived事件处理数据的接收。由于DataReceived发生
控件
在第二个库项目中,我使用了一个SerialPort
-实例,通过SerialPort.DataReceived
事件处理数据的接收。由于DataReceived
发生在第二个线程中,我在桌面变量中使用了SynchronizationContext
,Invoke
不依赖于图形内容。以下是一个简单的例子:
Public Class Comm
Private dllContext As SynchronizationContext
Private port as SerialPort
Public Sub New()
dllContext = SynchronizationContext.Current
port = new SerialPort("COM1")
End Sub
Public Sub port_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles port.DataReceived
Dim data(-1) as Byte
'
' Read Received Data into the data-Variable, yet.
'
If (dllContext IsNot Nothing) then
dllContext.Send(Sub() RaiseEvent DataReceived(Me, data), Nothing)
Else
RaiseEvent DataReceived(Me, data)
End If
End Sub
End Class
公共类通信
作为同步上下文的专用dllContext
专用端口作为串行端口
公共分新()
dllContext=SynchronizationContext.Current
端口=新串行端口(“COM1”)
端接头
公共子端口_DataReceived(ByVal发送方作为对象,ByVal e作为System.IO.Ports.SerialDataReceivedEventArgs)处理port.DataReceived
Dim数据(-1)作为字节
'
'将接收到的数据读入数据变量,但。
'
如果(dllContext不是空的),那么
dllContext.Send(Sub()RaiseEvent DataReceived(Me,data),Nothing)
其他的
已接收RaiseEvent数据(Me,数据)
如果结束
端接头
末级
将此代码移植到.Net CF时,没有可用的SynchronizationContext
。我在网上搜索发现:
但是作者使用的是Control.Invoke,我不想使用它(在System.Windows.Forms中)
由于几天来我没有发现其他方法,我的问题是:如何解决这个问题
谢谢
克里斯托夫