.Net Compact Framework:SynchronizationContext的替代方案

时间:2013-06-21 13:01:35

标签: .net compact-framework synchronizationcontext

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

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

在我使用SerialPort - 实例的第二个库项目中,数据的接收是通过SerialPort.DataReceived事件处理的。由于DataReceived出现在第二个帖子中,我在桌面变体中使用SynchronizationContextInvoke无法依赖图形内容。以下是一个简单的例子:

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

将此代码移植到.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中)

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

谢谢,

了Christoph

0 个答案:

没有答案