私は、VB.Net で記述された Visual Studio 2008 ソリューション内の 2 つのプロジェクトで構成される Windows CE 6 用のプログラムに取り組んでいます。以前、Windows デスクトップ用に同様のプログラムを作成したので、できるだけ多くのコードを再利用したいと考えています。
一般的な構造は次のとおりです。最初のプロジェクトにはフロントエンド GUI が含まれ、2 番目のプロジェクトにはシリアル通信用のライブラリが含まれます。このライブラリは、他の GUI で再利用可能である必要があり、たとえば、グラフィカルなものに依存してはなりませんControl 。
インスタンスを使用している 2 番目のライブラリ プロジェクトではSerialPort、データの受信はSerialPort.DataReceivedイベントを介して処理されます。2 番目のスレッドで発生するようDataReceivedに、私はデスクトップ バリアントで使用SynchronizationContextしていますが、グラフィカルな要素に依存しないと利用できません。以下は簡単な例です。Invoke
パブリック クラス コミュニケーション
SynchronizationContext としてのプライベート dllContext
SerialPort としてのプライベート ポート
Public Sub New()
dllContext = SynchronizationContext.Current
ポート = 新しい SerialPort("COM1")
サブ終了
Public Sub port_DataReceived (ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) port.DataReceived を処理します
Dim データ (-1) をバイトとして
'
' 受信したデータをデータ変数に読み込みます。
'
If (dllContext IsNot Nothing) then
dllContext.Send(Sub() RaiseEvent DataReceived(私、データ)、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 にあります)。
何日も他のアプローチを見つけられなかったので、私の質問は次のとおりです。これをどのように解決できますか?
ありがとう、
クリストフ