2011-09-15 42 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

相關問題