我有方法更新UI使用並行任務
public override void InitializeRow(object sender, InitializeRowEventArgs e)
{
if (!e.ReInitialize)
Task.Factory.StartNew(() =>
{
AfterInitializeRow(sender, e);
});
}
public override void AfterInitializeRow(object sender, InitializeRowEventArgs e)
{
foreach (UltraGridColumn ugc in e.Row.Band.Columns)
{
if (IsNumeric(ugc.Key))
{
e.Row.Cells[ugc].DroppedDown = true;
e.Row.Cells[ugc].ValueList = 「Some value」;
e.Row.Cells[ugc].SetValue(e.Row.Cells[ugc.Key].Value, false);
e.Row.Cells[ugc].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.DropDownList;
}
}
}
但其在e.Row.Cells給錯誤[UGC] .DroppedDown = TRUE; 我瞭解到只有主線程才能更新UI。 但是有可能在更新DroppedDown時只切換到主線程。超過1000行的Bcoz以這種方式初始化,使網格的負載非常緩慢。所以我想在這個過程中做一些並行處理。
如果修復了'e.Row.Cells [ugc] .DroppedDown = true;'行中的錯誤,您將在下一行出現異常等等。接受你無法從另一個線程更新UI的現實。如果你設法這樣做了,一些不好的事情正在等着你。 – 2014-11-06 12:13:22
如果你使用MVVM,你不會有這個問題。我擔心你的方法,你應該使用Dispatcher.Invoke。 – 2014-11-06 12:14:27
@IL_Agent實際上是一個Windows應用程序,但使用4.5版本的.net。實際上,這部分代碼運行時間很長,我正在尋找一種更快的方法來完成這項任務。感謝您回覆 – Nijith 2014-11-06 13:28:18