我有方法更新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