Заставить главный поток использовать Return on RunWorkerCompletedEventArgs - PullRequest
0 голосов
/ 22 января 2019

В моем приложении я устанавливаю / получаю данные в устройствах через инфракрасный ридер. Когда я запускаю свое приложение, у меня есть два случая: - Устройство находится здесь все время, я возвращаю объект 'RETOUR' - Устройство было здесь в начале, но кто-то отключил его, когда моя функция работала.

Я бы хотел вернуть объект типа 'RETOUR' в обоих случаях.

Точка входа обязательно является такой функцией: «Публичная асинхронная задача XXX (динамический ввод)»

Я строю фонового работника, который находит, когда устройство отключено. Это работает, но я не знаю, как заставить мою асинхронную задачу возвращать объект, когда вызывается RunWorkerCompletedEventHandler.

Код запуска Backgroundworker в каждой функции «асинхронная задача»:

        bw = new BackgroundWorker();
        bw.WorkerSupportsCancellation = true;

        bw.DoWork += new DoWorkEventHandler(
        delegate (object o, DoWorkEventArgs args)
        {
            // called when AwaitEpdRemoval have response
            stack.EpdRemoved += (object sender, ConnectEventArgs e) =>
            {
                // Set the object i want to return
                STATIC_FUNCTION.mon_retour.GestionErreur("154", null);
            };

            // While AwaitEpdRemoval don't throw EpdRemoved object
            while (true && STATIC_FUNCTION.mon_retour.code_retour != "154")
            {
                try
                {
                    if (bw.CancellationPending) {
                        args.Cancel = true;
                        break;
                    }
                    // If device still here
                    stack.AwaitEpdRemoval(discoveredEpd);
                }
                catch (Exception e)
                {
                    // If the device is still the here the DLL throw error
                    System.Threading.Thread.Sleep(100);
                }
            }
        });

        // when the worker is completed
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
            delegate (object o, RunWorkerCompletedEventArgs args)
            {
                // for now i close the app, but what i want is return STATIC_FUNCTION.mon_retour
                System.Environment.Exit(1);
            });

        bw.RunWorkerAsync();

Пока он закрывает все, но я хочу, чтобы он остановил другой код и возвратил объект "STATIC_FUNCTION.mon_retour"

Как я могу это сделать (даже если мне нужно переписать что-нибудь).

...