Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 布尔函数c上的BackgroundWorker#_C#_Background_Boolean_Backgroundworker - Fatal编程技术网

C# 布尔函数c上的BackgroundWorker#

C# 布尔函数c上的BackgroundWorker#,c#,background,boolean,backgroundworker,C#,Background,Boolean,Backgroundworker,我有一个布尔函数。我有一个bw,我想用它来运行这个函数。 我想从函数中获取返回值,可以吗 下面是一个示例代码: void Main () { BackgroundWorker backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += (sender1, e1) => testBool(); bool result = backgroundWorker.RunWorkerAsync

我有一个布尔函数。我有一个bw,我想用它来运行这个函数。 我想从函数中获取返回值,可以吗

下面是一个示例代码:

void Main ()
{
     BackgroundWorker backgroundWorker = new BackgroundWorker();
     backgroundWorker.DoWork += (sender1, e1) => testBool();
     bool result = backgroundWorker.RunWorkerAsync;
}

bool testBool()
{
     return true;
}
可能吗

谢谢。

您可以订阅事件以接收有关计算机已终止的事实的通知

在该
testBool(…)
中,您可以设置全局变量,然后在内部
RunWorkerCompleted的事件处理程序读取该值。

您可以像这样使用e.Result: 第一步:您需要添加事件RunWorkerCompleted

    _bw.RunWorkerCompleted += BwRunWorkerCompleted;
并创建函数brunworkercompleted,该函数将在线程完成后激发。例如:

private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // First, handle the case where an exception was thrown.
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message);
            }

           // 
            if (e.Result != null)
            {
                // test if result is true or false <== HERE YOU GO!
                if ((Boolean)e.Result == true)
                {
                    this.Hide();
                    Form fm = new SFGrilla(ref lr, ref binding);
                    fm.ShowDialog();
                    this.Close();
                }
            }
            else
            {
                // hide the progress bar when the long running process finishes
                progressBar.Visible = false;

                // enable button
                btnLogin.Enabled = true;
            }

        }

希望有帮助。

不,这是不可能的。使用BackgroundWorker的目的是在另一个线程上运行代码。这需要时间来计算结果。等待该结果完全违背了使用辅助程序的目的,并且很可能导致死锁,您最好直接调用testBool()。
private void testbool(object sender, DoWorkEventArgs doWorkEventArgs) {
      success = true;
      doWorkEventArgs.Result = success;
}