public void getdata(int b1, int b2, int b3)
{
DataSet dt;
for (int i = b2; i <= b3; i++)
{
dt.Tables.Add(returntab(b1));
} DataGridView1.DataSource = dt.Tables[b1 + 1];
} private void button1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
int b1 = int.Parse(textBox1.Text.Trim());
int b2 = int.Parse(textBox2.Text.Trim());
int b3 = int.Parse(textBox3.Text.Trim()); getdata(b1, b2, b3);
}上面的代码在执行returntab(b1)方法时可能需要很长时间,
用记在等待时需要实现以下功能:
1.用户在等待时可以取消执行
2.在等待时可以在界面进行其他操作
下午看了一下线程,不甚清楚
3.如果是在其他事件中执行这些代码,那么线程应该如何处理呢大家帮忙
{
DataSet dt;
for (int i = b2; i <= b3; i++)
{
dt.Tables.Add(returntab(b1));
} DataGridView1.DataSource = dt.Tables[b1 + 1];
} private void button1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
int b1 = int.Parse(textBox1.Text.Trim());
int b2 = int.Parse(textBox2.Text.Trim());
int b3 = int.Parse(textBox3.Text.Trim()); getdata(b1, b2, b3);
}上面的代码在执行returntab(b1)方法时可能需要很长时间,
用记在等待时需要实现以下功能:
1.用户在等待时可以取消执行
2.在等待时可以在界面进行其他操作
下午看了一下线程,不甚清楚
3.如果是在其他事件中执行这些代码,那么线程应该如何处理呢大家帮忙
解决方案 »
- 菜鸟求教:如何看到vs中c#系统自带的库的具体实现
- 数据的删除问题
- 这个问题真的有点难度 高手来!!!!!
- GridView更新,没报错,怎么就是没成功!
- DataGridViewComboBoxColumn更改值时引发的事件是什么啊
- 问个ArrayList问题
- 在前台onunload事件中怎样调用后台的方法
- (Winform)怎样设置DataGrid某一个单元格内的Combobox控件为可用或不可用呢?
- 怎样自己颁发证书(*.cer),并让客户注册后自动下载证书
- 如何去获取子窗体中的文本信息(我使用GetWindowText获取到的数据为空)
- 这个委托如何写
- 数据转换?Unicode编码的中英文互换~
就可以实现在不同的线程操作控件了;
2)在button1事件中使用线程
(1)ThreadPool.QueueUserWorkItem(getdata);
(2) Thread t = new Thread(new ThreadStart(getdata));
t.Start();
还需要考虑:线程执行结束后如何与主线程通信(回调、同步)
找《.NET框架设计(第2版)》等数看看。
不甚明白
是要设计成静态方法吗?
DataGridView1.DataSource = dt.Tables[b1 + 1];
DataGridView1要求对象引用,无法设计成静态方法。
2、看看C#多线程的编程,理解线程的工作方式,
3、自己动手写个简单的线程或几个线程的同步,
4、再用线程去更新你主线程的UI显示
public void getdata(int b1, int b2, int b3)
{
DataSet dt;
for (int i = b2; i <= b3; i++)
{
dt.Tables.Add(returntab(b1));
} DataGridView1.DataSource = dt.Tables[b1 + 1];
} private void button1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
int b1 = int.Parse(textBox1.Text.Trim());
int b2 = int.Parse(textBox2.Text.Trim());
int b3 = int.Parse(textBox3.Text.Trim()); this.Invoke(new getdataHandler(getdata), new object[] { b1, b2, b3 });
}
//上面是基本的写法
int.TryParse(textBox1.Text.Trim(),out parameter[0]);
int.TryParse(textBox2.Text.Trim(),out parameter[1]);
int.TryParse(textBox3.Text.Trim(),out parameter[2]);
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(getdata));
t.Start(parameter);
private void getdata(object sender)
{
int[] parameter = sender as int[];
DataSet dt;
for (int i = parameter[1]; i <= parameter[2]; i++)
{
Table t = returntab(parameter[0]);
dt.Tables.Add(t);
} this.Invoke(new MethodInvoker(delegate()
{
DataGridView1.DataSource = dt.Tables[parameter[0 + 1];
}));
}
{
int b1, b2, b3; public event EventHandler Finished; public F(int B1, int B2, int B3)
{
b1 = B1; b2 = B2; b3 = B3;
} public DataTable returntab(int i)
{
return new DataTable();
} public void getdata(int b1, int b2, int b3)
{
DataSet dt = new DataSet();
for (int i = b2; i <= b3; i++)
{
dt.Tables.Add(returntab(b1));
} if (Finished != null) Finished(dt.Tables[b1 + 1], null);
//dataGridView1.DataSource = dt.Tables[b1 + 1];
} public void run()
{
getdata(b1, b2, b3);
}
}private void button1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
int b1 = int.Parse(textBox1.Text.Trim());
int b2 = int.Parse(textBox2.Text.Trim());
int b3 = int.Parse(textBox3.Text.Trim()); F f = new F(b1, b2, b3); f.Finished += new EventHandler(f_Finished); System.Threading.Thread thd = new System.Threading.Thread(new System.Threading.ThreadStart(f.run));
thd.Start();
//getdata(b1, b2, b3);
}private void f_Finished(object sender, EventArgs e)
{
if (dataGridView1.InvokeRequired)
{
EventHandler handler = new EventHandler(f_Finished);
dataGridView1.Invoke(handler, new object[] { sender, e });
}
else
{
if (sender != null)
{
dataGridView1.DataSource = (sender as DataTable);
}
}
}