【问题标题】:How to check a forms background work from another form如何从另一个表单检查表单背景工作
【发布时间】:2011-09-16 04:31:07
【问题描述】:

我有 2 个 winform,一个(称为 Form1)包含一个后台工作程序,该表单打开第二个表单(Form2)。 Form1 启动一个后台工作程序,并在其工作时打开 Form2,以便用户可以执行其他操作。当用户在 Form2 上完成并单击提交时,我想检查 Form1 的后台工作人员是否已完成,如果没有弹出消息要求用户等待一分钟,否则允许 Form2 提交。

如何从 Form2 中查看 Form1 的后台工作人员的状态?我看了这篇帖子Check to see if a thread in another form is still running,但我的情况不同,我不确定如何适应。

【问题讨论】:

    标签: c# .net winforms multithreading


    【解决方案1】:

    检查BackgroundWorker.IsBusy 属性。

    编辑

    有多种选项可以使该信息可用于第二种形式。

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

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

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

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

    或者(我认为这是最好的)您可以将提交代码放在 Form1 中,然后将 Form2 用作对话框。那么Form2 就不需要知道Form1 的任何事情了。 Form1 以模态方式打开 Form2,当 Form2 关闭时,Form1 检查工作人员是否已完成,并采取相应措施。

    【讨论】:

    • -是的,但我无法从其他表单“看到”后台工作人员。
    • @MAW:为我的回答添加了一些建议。
    • - 在 Form2 上使用 CanSubmit 变量从后台工作人员的已完成方法设置。用于简单易用。
    【解决方案2】:

    情况几乎与您的问题中提供的情况相似。 你可以这样做:

    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 有一个属性可以检查后台工作人员状态

    【讨论】:

    • -没有工作,因为我从 Form2 看不到 Form1。
    • @MAW74656:在 Form2 中,您有 form1,它实际上已初始化为 Form1 调用者对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多