有没有办法同时调用多种方法?我有一个在加载数据加载数量惊人的WinForms应用程序:异步调用多种方法
private void form1_Load(object sender, EventArgs e)
{
LoadValues1();
LoadValues2();
LoadValues3();
LoadValues4();
LoadValues5();
LoadValues6();
LoadValues7();
LoadValues8();
}
这些方法检索数据和填充的DevExpress LookUpEdits(类似于Windows dropdownlists),所以他们都看起来像这样:
DBContext dbContext = new DBContext();
ObservableCollection<string> values1 =
new ObservableCollection<string>((from i in dbContext.Items
where i.Value1 != null
&& i.Value1.Length > 0
orderby i.Value1
select i.Value1).Distinct());
lookupValues1.Properties.DataSource = descModelYear;
DevExpress.XtraEditors.Controls.LookUpColumnInfoCollection colInfo = lookupValues1.Properties.Columns;
colInfo.Clear();
colInfo.Add(new DevExpress.XtraEditors.Controls.LookUpColumnInfo("Column"));
colInfo[0].Caption = "Values 1";
和一些方法需要一段时间才能完成,但他们都不是彼此依赖,所以我想我可以做他们都在同一时间:
Task.Factory.StartNew(() => LoadValues1());
Task.Factory.StartNew(() => LoadValues2());
etc.
BU t当第二个任务运行时,我不断收到错误信息,称控件不能从与创建它不同的线程访问。
任何帮助表示赞赏!
在方法'LoadValuesXXX'你试图操纵UI(现在从另一个线程)这是不好的。有数百个关于此主题的现有问题/答案。 – spender 2013-03-26 18:01:43
一旦你解决了交叉线程问题,你可能想知道你可以使用一个缩写来在一个单独的线程中运行一组动作,并等待它们完成,如下所示:'Parallel.Invoke( '1,action2,action3,action4,action5);' – 2013-03-26 18:39:57