2013-02-22 57 views
1

我問過這個問答,但可能是我沒說清楚,所以我再次發佈。我有一個gui。當我按下「button1」時,我的gui開始串行通信。我發送一些命令並接收一些數據。一旦我按下「button1的」我在3,4-秒,直到數據的其他線程(比GUI線程以外)被完全傳送。 我想要是一個對話框,彈出或類似的東西(顯示一個忙碌的消息),當我按下按鈕1時出現在我的GUI的前面,並且這個彈出窗口在串行通信正在發生的另一個線程中自動關閉當整個數據被傳輸時。GUI忙消息

有人建議回地面的工人,但我並不清楚。

一個很好的解釋還是有辦法做到這一點考慮我的情況?

感謝

+3

你使用Windows窗體或WPF? – animaonline 2013-02-22 08:30:47

+0

好,謝謝您的反饋意見。我不會再這樣做。 @animaonline我正在使用Windows窗體應用程序 – user1903439 2013-02-22 08:36:00

回答

0

我會用下面的代碼做到這一點:

public partial class frmWait : Form 
{ 
    private BackgroundWorker worker; 

    public frmWait() 
    { 
     InitializeComponent(); 
     this.worker = new BackgroundWorker 
      { 
       WorkerReportsProgress = true 
      }; 
     this.worker.RunWorkerCompleted += WorkerOnRunWorkerCompleted; 
     this.worker.DoWork += WorkerOnDoWork; 
     this.worker.ProgressChanged += WorkerOnProgressChanged; 
     this.worker.RunWorkerAsync(); 
    } 

    private void WorkerOnProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     // Update UI or something else 
    } 


    private void WorkerOnDoWork(object sender, DoWorkEventArgs e) 
    { 
     // Do background-stuff here 
    } 

    private void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     // Actions after BackgroundWorker is done 
     Close(); 
    } 
} 
與Button1的形式

,在按鈕的點擊事件中,你只需要:

frmWait wait = new frmWait(); 
wait.ShowDialog(); 
+0

在你的評論「/ /做背景的東西在這裏//更新用戶界面或其他東西」你在這裏意味着什麼。我提到我在另一個線程中有我的串行通信,所以你的代碼如何與它集成。謝謝 – user1903439 2013-02-22 09:39:19

+0

在WorkerDoWork-Part中,您可以檢查您的其他胎面是否存在。如果是,那麼等一下。 – Tomtom 2013-02-22 10:27:23