C# Проблемы с обработчиками событий на умирающих потоках
Прежде всего, мой Main - это STAThread, и я не могу изменить это, не столкнувшись с проблемами с остальным кодом.
Итак, я в настоящее время использую Rapi2, чтобы тянуть и толкать файлы между моим КПК и компьютером. Теперь, так как существует небольшое количество перебора чисел, я хотел бы сделать это в отдельном потоке. Сначала я создаю 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();
}
Но поток умирает и, таким образом, никогда не запускает мой обработчик событий. Я пробовал много разных способов заставить это работать или поддерживать мою нить, но безуспешно. Я надеюсь, что кто-то здесь сможет дать мне несколько советов.