强制主线程在RunWorkerCompletedEventArgs上使用Return

时间:2019-01-22 10:59:54

标签: c# multithreading backgroundworker

在我的应用程序中,我通过红外读取器设置/获取设备中的数据。 当我运行我的应用程序时,我有两种情况: -设备一直在这里,我返回一个对象“ 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”

我该怎么做(即使我必须重写所有内容)。

0 个答案:

没有答案