創建UI重元素這是工作的代碼(但是UI線程):另一個線程WPF
<ContentControl
Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"
Focusable="True"
HorizontalAlignment="Right"
Content="{Binding Work}" >
</ContentControl>
這是我想要做,而不是代碼,但它不工作:(代碼隱藏)
InitializeComponent();
var thread = new Thread(
() =>
{
var a = new ContentControl { Focusable = true, HorizontalAlignment = HorizontalAlignment.Right };
var binding = new Binding { Path = new PropertyPath("Work"), };
a.SetBinding(ContentProperty, binding);
MainGrid.Dispatcher.Invoke(new Action(() => { MainGrid.Children.Add(a); }));
}) { IsBackground = true };
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
我的目標是創建一個ConentControl
,並將其放置在網格中,這是一個listview
內有多個ContentControls
)所示的方案是崩潰,因爲不同的線程擁有MainGrid
。 任何人都有這個好主意? (很想做它在另一個線程,因爲ContentControl
很重,像3秒以創建佈局這是它根據參數創建自己的通用視圖。)
編輯:
的主要問題在創建這些視圖的過程中,我的整個應用程序都處於掛起狀態。這是非常不想要的。我的目標是將此工作負載移到另一個(或多個)其他線程。
您不能在UI線程以外的線程上創建UI元素。您可以創建在另一個線程上創建UI所需的數據。這就是你應該做的。從UI線程中獲取所有的IO。這應該使UI快速建立。 – Enigmativity