如果后台工作人员忙,我怎么告诉表格不要靠近?

时间:2015-02-05 14:00:23

标签: c# .net winforms

private void ScanClouds_FormClosing(object sender, FormClosingEventArgs e)
{
    backgroundWorker2.WorkerSupportsCancellation = true;
    if (backgroundWorker2.IsBusy)
    {
        backgroundWorker2.CancelAsync();
    }
    Terminate();
}

除了调用CancelAsync之外,我还想告诉表单不要接近。 然后在完成的事件中,我正在关闭表格:

private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Cancelled == true)
    {
        this.Close();
    }
}

问题是当我点击关闭表格时如何告诉他不要靠近并在完成的活动中关闭它?

4 个答案:

答案 0 :(得分:5)

您可以覆盖OnFormClosing方法,以防止表单关闭。将e.Cancel设为true

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (backgroundWorker2.IsBusy)
    {
        e.Cancel = true;
        return;
    }

    base.OnFormClosing(e);
}

您可以在里面显示一个消息框,或者做任何其他事情来通知用户您取消结算的原因。

答案 1 :(得分:2)

private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
   if (bgWorker.IsBusy)
        e.Cancel = true;
}

答案 2 :(得分:1)

    private void ScanClouds_FormClosing(object sender, FormClosingEventArgs e)
{
    backgroundWorker2.WorkerSupportsCancellation = true;
    if (backgroundWorker2.IsBusy)
    {
        backgroundWorker2.CancelAsync();
e.Cancel = true;
    }
    Terminate();
}

你也可以像上面那样在MyForm_FormClosing中编写e.Cancel=true,因为它也在内部调用表单的OnFormClosing方法。

答案 3 :(得分:0)

拒绝执行用户操作的错误表单。相反,您应该通过视觉反馈和线索指出表单不是可以关闭的。例如,在后台作业运行时将ControlBox设置为False

表单关闭时,您也可以保持表单可关闭,中止后台任务。当然,这需要从任务中进行合作(并非所有任务都是可以中止的)。