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();
    }

Но поток умирает и, таким образом, никогда не запускает мой обработчик событий. Я пробовал много разных способов заставить это работать или поддерживать мою нить, но безуспешно. Я надеюсь, что кто-то здесь сможет дать мне несколько советов.

0 ответов

Другие вопросы по тегам