我有一个带有框架的窗口(比如主窗口),其中有一个页面。页面上的按钮打开另一个窗口(比如弹出窗口)。现在我正在尝试从弹出窗口上的按钮调用主窗口中的方法。该方法必须是多线程的,我在 Windows 窗体中运行了一个类似的解决方案,但我不断得到调用线程必须是 STA,因为许多 UI 组件在 WPF 中需要这个。
页面上以模态方式打开弹窗的方法
Scripts showStocks = new Scripts();
showStocks.ShowInTaskbar = false;
showStocks.ShowDialog();
if (showStocks.DialogResult==true)
{
Window1 wd1 = new Window1();
wd1.doneDeal();
}
这里 window1 是我们的主窗口。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 公寓状态位。如果有人可以帮助我使用我的刻度方法或指出我正确的方向,我将非常感谢。