2013-10-16 71 views
0

我需要編寫一個只有進度條和取消按鈕的WPF程序集。這個gui必須運行在一個子線程中,這樣一個調用程序集的程序(發送進度值和檢查取消狀態)不會被阻塞。我知道如何通過Backgroundworker執行此操作,但不知道如何在子線程中運行gui並在兩個線程之間進行通信。任何幫助讚賞。SubBread中的ProgressBar

類啓動GUI線程:

public ProgressBar() 
{ 
    StartProgressWindowThread(0);  
} 

private void StartProgressWindowThread(int numberProgressBars) 
{ 
    progressThread = new Thread(new ParameterizedThreadStart(ThreadStartPoint)); 
    progressThread.IsBackground = true; 
    progressThread.SetApartmentState(ApartmentState.STA); 
    progressThread.Start(numberProgressBars); 
} 

private void ThreadStartPoint(object args) 
{ 
    progressBarWindow = new ProgressBarWindow(args); 
    progressBarWindow.OnCancel += new EventHandler(CancelAction); 
    progressBarWindow.Show(); 
    System.Windows.Threading.Dispatcher.Run(); 
} 

更新: 在我從調用的類通過了NamedPipes將消息發送到GUI線程,然後調用發送的值的時刻。 gui上的取消按鈕通過代理連接。這工作正常,但我不確定NamedPipes是否是正確的選擇。

+2

你*什麼是*能夠做的,所以,我們沒有再這樣做,你已經有了到目前爲止的工作提供代碼,具體是什麼方面的澄清你遇到麻煩的解決方案。 – Servy

回答

0

您可以使用調用:

Invoke(new Action<object>((args) => 
{ 
    // update gui from a different thread 

}), e.Argument);