0

我有一个布尔函数。我有一个希望用来运行此功能的 bw。我想从函数中获取返回值,可以吗?

这是一个示例代码:

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

bool testBool()
{
     return true;
}

可能吗?

谢谢。

4

2 回答 2

1

您可以订阅BackgroundWorker.RunWorkerCompleted事件以接收有关计算终止的事实的通知。

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

于 2013-04-22T13:13:45.300 回答
1

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

    _bw.RunWorkerCompleted += BwRunWorkerCompleted;

并创建函数BwRunWorkerCompleted,这将在线程完成后触发。例如:

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

        }

你的 testbool() 应该有正确的参数:

private void testbool(object sender, DoWorkEventArgs doWorkEventArgs) {
      success = true;
      doWorkEventArgs.Result = success;
}

希望能帮助到你。

于 2015-05-12T12:50:52.607 回答