利用BackgroundWorker 实现线程查询显示进度条,并允许终止查询(模仿SQL查询)
来源:互联网 发布:马伯庸 三国 知乎 编辑:程序博客网 时间:2024/06/15 13:02
//利用组件实现线程查询
private SqlCommand fCurCommand;
private string fCommandText = string.Empty;
private SqlConnection fConnection;
private DataSet fdsResult;
private bool fIsCommandIsCancelOrError = false;
private delegate void myDelegatDoProcess();
private delegate void myDelegateSetDataSrc(object t);
private delegate void PDelegate();
private delegate void PDelegateA(object t, EventArgs a);
using (BackgroundWorker backgroundWorker = new BackgroundWorker())
{
// 异步获取数据
backgroundWorker.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs workerEventArgs)
{
this.BeginInvoke(new myDelegatDoProcess(doProcess )); //利用委托显示进度条
fCommandText = strSQL;
using (SqlDataAdapter fAdapter = new SqlDataAdapter(fCommandText, fConnection ))
{
try
{
fIsCommandIsCancelOrError = false;
fCurCommand = fAdapter.SelectCommand;
fCurCommand.CommandTimeout = 0;// 永不超时
fdsResult = new DataSet();
fAdapter.Fill(fdsResult);
fCurCommand = null;
}
catch (Exception x)
{
//MessageBox.Show(x.Message);
fIsCommandIsCancelOrError = true; //查询出错或用户已取消查询
}
}
});
// 数据获取完成,绑定数据
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(delegate(object o, RunWorkerCompletedEventArgs x)
{
if (MyGrdQueryResult.IsHandleCreated)
{
if (!fIsCommandIsCancelOrError)
{
//this.MyGrdQueryResult.DataSource = fdsResult.Tables[0];
bdsQueryResult.DataSource = fdsResult.Tables[0];
this.BeginInvoke(new myDelegateSetDataSrc(SetQueryResultData), new object[] { bdsQueryResult });//显示查询结果集
this.BeginInvoke(new PDelegate(SetGridViewFrmt));//设置列格式
this.BeginInvoke(new PDelegate(ShowCountRecord));//显示记录总数
this.BeginInvoke(new PDelegateA(DoExecSumItem), new object[] { null, null });//执行计算合计
}
if (fIsCommandIsCancelOrError == false)
{
this.tsPressBarQry.Value = 100;
}
}
});
backgroundWorker.RunWorkerAsync();
}
// <summary>
/// 终止查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsBtCancel_Click(object sender, EventArgs e)
{
if (fCurCommand != null)
{
try
{
fCurCommand.Cancel();
//MessageBox.Show("查询已停止");
}
catch (Exception x)
{
MessageBox.Show(x.Message);
}
}
//flagCancel = true;
//tmyThrdGetdata.Abort();
//tmyTrrdProcess.Abort();
}
/// <summary>
/// 显示进度条
/// </summary>
private void doProcess()
{
if (tsPressBarQry.IsDisposed == false)
{
this.tsPressBarQry.Value = 0;
tsPressBarQry.Minimum = 0;
tsPressBarQry.Maximum = 100;
tsPressBarQry.Step = 10;
while ((tsPressBarQry.IsDisposed == false) && (tsPressBarQry.Value < 100))
{
//if (flagCancel) { break; }
//if (flagGetDataOver == true) { tsPressBarQry.Value = 100; break; }
if (tsPressBarQry.Value == 99)
{
tsPressBarQry.Value = 0;
}
tsPressBarQry.Value++;
Thread.Sleep(500);
Application.DoEvents();
}
}
}
- 利用BackgroundWorker 实现线程查询显示进度条,并允许终止查询(模仿SQL查询)
- 查询数据库的数据,是个比较费时的工作,在使用线程查询的时候显示个进度条,并允许终止查询的实现
- 查询进程名并终止
- PL/SQL 查询session杀不掉,强制终止线程的解决方法
- ADO异步查询显示进度条
- 实现组合查询数据并分页显示
- 利用native SQL实现外连接查询
- sql查询并修改
- Web方式查询进度条实现
- Web方式查询进度条实现
- Web方式查询进度条实现
- sql分类显示查询
- SQL连接查询和合并查询
- 通过BackgroundWorker实现进度条的显示,并将进度显示在进度条上
- sql语句查询,分批显示查询结果
- backgroundworker 导出excel并显示进度条
- 【C#】如何在查询数据库表并显示到DataGridV中的进度条动态显示?
- goole map v3 API 在线、离线开发、实现多标注显示、模仿多地址查询显示
- ssh 公钥方式认证攻略
- 基于Google Reader的个人知识管理方案
- Android PinyinIME 源码笔记 -- 1. 底层服务接口简介
- 在 Linux 中使用动态磁盘
- eclipse常用快捷键
- 利用BackgroundWorker 实现线程查询显示进度条,并允许终止查询(模仿SQL查询)
- zoj 2966
- 定义一个具有10 个整形元素的数组,随机生成1——100 之间的整数初始化数组元
- Android权限列表permission说明
- 国际化程序
- oepncv CvWaitKey
- arm体系结构与汇编100问
- 目前游戏行业内部主要几款游戏引擎的技术对比
- hashmap, treemap, hashtable, hashcode 的使用和探讨