有两个问题:1 想做一个多线程异步的程序,要求如下根据用户输入的整数来生成多少个线程(最多不大于10), 多个线程跑同一个SQL脚本, 同不过是参数不同罢了, 当多个线程跑完, 再将多个线程查询出来的结果汇总到一个List中, 再返回到页面绑定到数据控件, 但整个过程必须是异步, 不能因为查询时间太久而造成假死的现像. 不知大家有没有相应的代码业推荐.2 根据上面的需求,我想用委托异步来写, 下面是我的代码, 在WindowsForm1中, 这里加上20个委托. public delegate string MyDelegate(string arg ); public List<string> lst;开始按钮触发事件: private void button1_Click(object sender, EventArgs e)
{ for (int i = 0; i < 20; i++)
{
Class1 obj = new Class1(); // 类初始化
MyDelegate dele = new MyDelegate(obj.GetList); //初始化委托
dele.BeginInvoke(i.ToString(), new AsyncCallback(BackDoWork), null);
}}// 回调方法 private void BackDoWork(IAsyncResult isResult)
{ AsyncResult aResult = (AsyncResult)isResult; MyDelegate Delt = aResult.AsyncDelegate as MyDelegate; // 找到源委托方法
lst.Add( Delt.EndInvoke(isResult)); // lst只是一个简单的List<string>}// 按钮二的触发事件 private void button2_Click(object sender, EventArgs e)
{
foreach (string s in lst)
{ this.label1.Text += lst.Count.ToString()+"--"; } lst.Clear();
}Class1类的定义: public class Class1
{ public string GetList( string i )
{ return i;
} } 操作顺序: 先按按钮1,等待5秒左右让它生成数据, 再按按钮2, 原先我以为显示的数据应该是1--2--3--4--.....20可显示的却是20--20--20--20.....20 为什么会这样呢, 有没有办法解决.
{ for (int i = 0; i < 20; i++)
{
Class1 obj = new Class1(); // 类初始化
MyDelegate dele = new MyDelegate(obj.GetList); //初始化委托
dele.BeginInvoke(i.ToString(), new AsyncCallback(BackDoWork), null);
}}// 回调方法 private void BackDoWork(IAsyncResult isResult)
{ AsyncResult aResult = (AsyncResult)isResult; MyDelegate Delt = aResult.AsyncDelegate as MyDelegate; // 找到源委托方法
lst.Add( Delt.EndInvoke(isResult)); // lst只是一个简单的List<string>}// 按钮二的触发事件 private void button2_Click(object sender, EventArgs e)
{
foreach (string s in lst)
{ this.label1.Text += lst.Count.ToString()+"--"; } lst.Clear();
}Class1类的定义: public class Class1
{ public string GetList( string i )
{ return i;
} } 操作顺序: 先按按钮1,等待5秒左右让它生成数据, 再按按钮2, 原先我以为显示的数据应该是1--2--3--4--.....20可显示的却是20--20--20--20.....20 为什么会这样呢, 有没有办法解决.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货