首先,我的 Main 是 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();
}
但是线程死了,因此永远不会触发我的事件处理程序。我尝试了许多不同的方法来使它工作或保持我的线程活着,但没有任何成功。我希望这里有人能给我一些提示。