0
我有一個窗口(說主窗口)與一個框架,其中有一個頁面。頁面上的按鈕打開另一個窗口(比如彈出窗口)。現在我正試圖從彈出窗口中的一個按鈕調用主窗口中的方法。該方法必須是多線程的,我有一個類似的解決方案在Windows窗體中運行,但我一直得到的調用線程必須是STA,因爲許多UI組件需要在WPF中。wpf線程,線程必須是STA
這將打開彈出式窗口模態
Scripts showStocks = new Scripts();
showStocks.ShowInTaskbar = false;
showStocks.ShowDialog();
if (showStocks.DialogResult==true)
{
Window1 wd1 = new Window1();
wd1.doneDeal();
}
下面窗口1是我們的主窗口中的頁面上的方法。該doneDeal方法是
public void doneDeal()
{
// **Some Code**
BackgroundWorker wworks1 = new BackgroundWorker();
wworks1.DoWork += Tickes;
wworks1.RunWorkerCompleted += Tickes2;
wworks1.RunWorkerAsync();
// Page1 pg1 = frame1.Content as Page1;
//NextPrimeDelegate dd=new NextPrimeDelegate(okreport);
// pg1.addScriptBtn.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
// new NextPrimeDelegate(okreport));
//startStopButton.Dispatcher.BeginInvoke(
// DispatcherPriority.Normal,
// new NextPrimeDelegate(CheckNextNumber));
//new Thread(() => Tick(stock, rowID, exchange)) { IsBackground = false }.Start();
}
最後我試圖在後臺
public void Tickes(object sender, DoWorkEventArgs e)
{
}
此外,我想填充從tickes方法的結果一個GridView運行的方法,這將是在後臺循環並反覆運行,但定期返回要添加到網格中的數據。我應該在進度更新活動中這樣做嗎?已經嘗試了很多東西來繞過wpf中的調度員和後臺工作人員,但我無法理解STA公寓狀態位。如果有人能夠幫助我使我的方法變好,或者指向正確的方向,我會非常感激。
你有沒有嘗試設置[公寓狀態(http://msdn.microsoft.com/en-us/library/ system.threading.apartmentstate%28v = vs.71%29.aspx)直接?我認爲這應該通過'Thread'類來完成,它可能在'BackgroundWorker'中不可用 – oleksii