まず、メインは STAThread であり、残りのコードで問題に直面せずにこれを変更することはできません。
そのため、現在、Rapi2 を使用して、Pda とコンピューターの間でファイルをプルおよびプッシュしています。かなりの数のクランチがあるので、これを別のスレッドで実行したいと思います。まず、RemoteDeviceManagerを作成してから、デバイスが接続されたときのイベント ハンドラーを作成します。
public void Initialize()
{
_deviceManager = new RemoteDeviceManager();
_deviceManager.DeviceConnected += DeviceConnected;
}
ご覧のとおり、デバイスが接続されるとDeviceConnectedがトリガーされます。これは、データベースをプルしてプッシュし、いくつかの作業を行うクラスです。
private void DeviceConnected(object sender, RemoteDeviceConnectEventArgs e)
{
if (e.Device == null) return;
... (unimportant code)
}
ここでの問題は、新しいスレッドでDeviceConnected内のコードを実行したいのですが、そのスレッドの外で初期化されたため、新しいスレッド内で
eにアクセスできないことです
だから今私が試したのは、Initializeを呼び出す前に新しいスレッドを作成することでした。
public Watcher()
{
_dataThread = new Thread(Initialize);
_dataThread.IsBackground = true;
_dataThread.Name = "Data Thread";
_dataThread.SetApartmentState(ApartmentState.MTA);
_dataThread.Start();
}
しかし、スレッドが停止するため、イベント ハンドラーが起動しません。私はそれを機能させたり、スレッドを存続させたりするためにさまざまな方法を試しましたが、成功しませんでした。ここで誰かが私にヒントを与えてくれることを願っています。