У меня есть окно (скажем, главное окно) с рамкой, в которой есть страница. Кнопка на странице открывает другое окно (скажем, всплывающее окно). Теперь я пытаюсь вызвать метод в главном окне с помощью кнопки во всплывающем окне. Метод должен быть многопоточным, у меня было похожее решение, работающее в формах Windows, но я продолжаю получать вызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого в 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)
{
}
Также я хочу заполнить сетку из результата метода тиков, это будет циклически повторяться в фоновом режиме, но периодически возвращать данные, которые будут добавлены в сетку. Должен ли я сделать это в событии обновления прогресса? Я много пытался обернуть голову вокруг диспетчера и фонового работника в wpf, но я не понимаю бит состояния STA. Если кто-то может помочь мне запустить мой метод тиков или указать правильное направление, я был бы очень очень благодарен.