问个多线程操作的问题 诸如 执行大批量数据更新的时候,子线程 执行sql操作,主线程上显示更新的进度比如显示已经更新多少条就是主线程和新开线程这之间的交互怎么做合适?现在的法子是,主程序一个timer ,一个label。子线程执行操作后对label赋值,然后timer对其进行访问 来显示 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 "执行sql操作"好象不太好控制,因为他没有中途的事件返回。除非你是有n条SQL操作,分步操作。不太建议使用定时器,可以尝试用事件。比如有个类中,有个event事件,而这个类要执行10条sql操作,每条占10%的时间。那么每执行一条,触发一下事件。而外部程序订阅这个事件(事件中带有进度等信息),并更新lable. 链接:这是我用BackgroundWorker实现的一个示例具体到你的问题,还要看你的SQL操作是如何的。假如是一句句Update的,那么可以在循环体内利用计数反馈进度信息。如果是一个存储过程一次性提交所有更新,那在ADO.NET的这头,没有合适的方法获知数据库那头处理的进度信息。 如果简单也可以直接调用函数更新。---“主线程和新开线程这之间的交互怎么做合适?”新线程Update(){ //..... ShowProProgress(0);}delegate void SetTextDelegate(int n);private void ShowProProgress(int n){ if (this.InvokeRequired) { this.Invoke(new SetTextDelegate(ShowProProgress), new object[] {n}); } else { this.label1.Text = n.ToString(); }} 顶3#,MS已经封闭了一个很好用的控件,稍微改改就可以实现LZ的需求 一个面试题:生成0~100不重复的随机数 一个关于COM的问题 怎么确定鼠标选中了你所绘制的图形 请问 打印流里面如何实现可以让文字竖打 怎样检测TreeView重命名是否为空?(C/S模式) 在winform中,datagrid问题 有没有什么办法实例化一个命名空间下的所有对象 请问这一串数字有什么规律么? 请问 "internal sealed class " 是定义什么类??? mono for Android 新手求助:关于iframe页面跳转 datagridview 的属性 AutoGenerateColumns 哪里可以找到?
那么每执行一条,触发一下事件。而外部程序订阅这个事件(事件中带有进度等信息),并更新lable.
{
//.....
ShowProProgress(0);
}
delegate void SetTextDelegate(int n);
private void ShowProProgress(int n)
{
if (this.InvokeRequired)
{
this.Invoke(new SetTextDelegate(ShowProProgress), new object[] {n});
}
else
{
this.label1.Text = n.ToString();
}
}