|
老实说你这个例子不是很让人清楚.还是我给你个例子吧! 这个是我实际开发中遇到的一个问题,和异步调用相关的业务逻辑是这样的:读取一个xls文件的内容,然后把改内容输出在winform中的一个datagridview上, 遍历一个xls文件是一个耗时操作,为避免在读取这段时间内,ui卡死在那,顾采用了多线程异步委托调用:主线程调用一个工作线程读取xls内容,填充到一个arraylist类的容器result中,工作线程将result的内容填充到ui的datagridview中. 过程是这样的: 用户点击按钮---- 浏览文件,选中一个目标,读取数据. //选取文件 private void selectfile() { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "xls文件(*.xls)|*.xls"; ofd.DefaultExt = "xls"; if (ofd.ShowDialog() == DialogResult.OK) { // 返回选择的文件名 path = ofd.FileName; this.textBox1.Text = path; this.Refresh(); //ReadFromXls 是一个功能类,作用是根据传递进去的路径读取一个xls文件内容,并填充Arraylist ReadFromXls rfx = new ReadFromXls(path); //work WorkClass workclass = new WorkClass(); workclass.WorkEvent += new dowork(workclass_WorkEvent); Thread workthread = new Thread(workclass.doit); workthread.Start(rfx); } } void workclass_WorkEvent(object sender, EventArgs eventarg) { ArrayList result = ((WorkClass)sender).Result; if (this.dataGridView1.InvokeRequired) { setdgv setdgv1 = new setdgv(this.setDataGridView); this.dataGridView1.Invoke(setdgv1, new ArrayList[] { result }); } }
|