2011-09-15 31 views
1

我有2个winforms,一个(称为Form1)包含一个后台工作器,并且该表单打开第二个表单(Form2)。 Form1启动一个后台工作器,并在工作时打开Form2,以便用户可以执行其他操作。当用户在Form2上完成并点击提交时,我想检查Form1的后台工作是否完成,以及是否不弹出询问用户等待一分钟的消息,否则允许Form2提交。如何从另一个表格检查表单背景工作

如何从Form2检查Form1的后台工作者的状态?我看了这篇文章Check to see if a thread in another form is still running,但我的情况是不同的,我不知道如何适应。

回答

0

检查BackgroundWorker.IsBusy属性。

编辑

要做出可为第二形态信息的各种选项。

  • 您可以在创建时将BackgroundWorker传递给Form2。 Form2然后可以检查IsBusy属性。

  • 您可以在Form1上创建一个公共属性IsRunningBackgroundWork,并为Form2提供对Form1的引用。该属性的吸气剂将检查BackgroundWorker.IsBusy

  • 您可以在Form2上创建一个公共属性CanSubmit,并在BackgroundWorker完成时将其设置为Form1。

    bgw.RunWorkerCompleted += (s, e) => form2.CanSubmit = true;

或者(和我认为这是最好的),你可以把提交的代码在Form1上,只需使用窗体2的对话框。然后,Form2不需要知道有关Form1的任何信息。 Form1以模态方式打开Form2,当Form2关闭时,Form1将检查该工作人员是否已完成,并相应地执行操作。

+0

是的属性,但我不能“看到”其他形式的后台工作。 – MAW74656

+0

@MAW:给我的答案增加了一些建议。 –

+0

- 使用后台工作人员已完成方法的Form2集上的CanSubmit变量。用于简单和轻松。 – MAW74656

0

情况是差不多类似于你的问题中提供的那个。 你可以做这样的事情:

public class Form1 
{ 
    public bool IsBackgroundWorkerStillRunning {get {....};} 
} 


public class Form2 
{ 
    Form1 form1 = null; 
    public Form2(Form1 frm1) 
    { 
     form1 = frm1; 
    } 

    private void OnSubmit(...) 
    { 
     if(form1.IsBackgroundWorkerStillRunning) 
       //wait 
     else 
       //proceed 
    } 
} 

一个在Form1有哪些检查后台工作状态

+0

- 未能工作,因为我无法从Form2获取Form1的可见性。 – MAW74656

+0

@ MAW74656:在Form2中你有form1,它实际上初始化为Form1调用者对象。 – Tigran

相关问题