0
我有一個工作應用程序,向網格添加新的RibbonTab和新的子控件。wpf後臺線程更新UI控制
我想提出這個動作在後臺線程的子控件可能需要一段時間從數據庫中收集數據等
我有下面的代碼至今:
Ribbon Ribbon_Main = new Ribbon();
Grid Grid_Main = new Grid();
Thread newthread2 = new Thread(new ThreadStart(delegate { Graphing_Template.add_report(); }));
newthread2.SetApartmentState(ApartmentState.STA); //Is this required?
newthread2.Start();
Class Graphing_Template()
{
static void add_report()
{
RibbonTab rt1 = new RibbonTab();
MainWindow.Ribbon_Main.Items.Add(rt1);
// Create control with information from Database, etc.
// add control to MainWindow.Grid_Main
}
}
我想要在後臺創建新的報表控件,並在準備就緒時將其添加到主UI。
我去解決的辦法是:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
DataTable dt1 = new DataTable();
---- Fill DataTable with
args.Result = datagrid_adventureworks_DT();
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
DataTable dt1 = (DataTable)args.Result;
Datagrid_Main.ItemsSource = dt1.AsDataView();
};
作爲一般規則,除非你是在UI線程不要觸摸UI對象。當然,在後臺線程中做一些咕嚕的工作,然後通過調度程序將UI更新編組到UI線程。 – Cameron
我可以生成兩個子對象,然後將它們傳遞迴UI線程? – user3329538
我不知道WPF給出了一個明確的答案,對不起。我懷疑它會起作用,但我知道它不會用winforms,例如,因爲Win32 UI對象只能由創建它們的線程觸及(WPF不使用Win32 UI對象來實現像按鈕,等等。)。 – Cameron