查询数据库的数据,是个比较费时的工作,在使用线程查询的时候显示个进度条,并允许终止查询的实现...

public partial class FormThradQuery : Form
{
public delegate void PDelegate();

public delegate void myDelegate(DataTable t);

public delegate void myDelegatDoProcess();

Thread tmyThrdGetdata;

Thread tmyTrrdProcess;

/// <summary>
/// 数据获取结束标记 True 获取结束,False 未完全获取
/// </summary>
bool flagGetDataOver = false;

/// <summary>
/// 用户取消查询标记,True 取消 ,False 未取消
/// </summary>
bool flagCancel = false;

private MMS.Public.DbAccLibry.DbAccess mydbacc;

public FormThradQuery()
{
InitializeComponent();

mydbacc = new MMS.Public.DbAccLibry.DbAccess();
mydbacc.DatabaseInint(MMS.Public.DbAccLibry.DataBaseType.MsSqlServer, "Server=192.192.192.8;Database=escashsystem;User ID=sa;Password=Hy@ecSun.cn;Connect Timeout=20;Pooling=True;Min Pool Size=1;Max Pool Size=100;Persist Security Info=False;Asynchronous Processing=true;Integrated Security=false;");
}

/// <summary>
/// 查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton1_Click(object sender, EventArgs e)
{
flagCancel = false; flagGetDataOver = false;

try
{
tmyTrrdProcess = new Thread(new ThreadStart(ThreadProcess));

tmyThrdGetdata = new Thread(new ThreadStart(ThreadGetData));

tmyTrrdProcess.Start();
tmyThrdGetdata.Start();

}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString() + ",数据查询失败", "查询提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}

private void FillData(DataTable dt)
{
this.dataGridView1.DataSource = dt.DefaultView;
}

void ThreadProcess()
{
this.BeginInvoke(new myDelegatDoProcess(doProcess));
}
private void doProcess()
{
this.toolStripProgressBar1.Value = 0;
toolStripProgressBar1.Minimum = 0;
toolStripProgressBar1.Maximum = 100;
toolStripProgressBar1.Step = 10;
while (toolStripProgressBar1.Value < 100)
{
if (flagCancel ) { break; }
if (flagGetDataOver == true) { toolStripProgressBar1.Value = 100; break; }
if (toolStripProgressBar1.Value == 99)
{
toolStripProgressBar1.Value = 0;
}
toolStripProgressBar1.Value++;
Thread.Sleep(500);
Application.DoEvents();
}
}

void ThreadGetData()
{
this.BeginInvoke(new PDelegate(SetInfoBegin));//label 显示开始查询

//tsLabelInfo .BeginInvoke(new PDelegate(SetInfoBegin)); //label 显示开始查询

DataTable dt = mydbacc.ExecuteDataSet(CommandType.Text, "select * from ecv_spbaseinfo ").Tables[0];

if (dataGridView1.IsHandleCreated)
{
this.dataGridView1.BeginInvoke(new myDelegate(FillData), new object[] { dt }); //填充查询结果
}

//tsLabelInfo.BeginInvoke(new PDelegate(SetInfoEnd)); //label 显示查询结束

this.BeginInvoke(new PDelegate(SetInfoEnd));//label 显示查询结束

flagGetDataOver = true;
}

/// <summary>
/// 开始查询提示
/// </summary>
private void SetInfoBegin()
{
this.tsLabelInfo.Text = "正在查询数据,请稍候。。。";
}

/// <summary>
/// 查询完成提示
/// </summary>
private void SetInfoEnd()
{
this.tsLabelInfo.Text = "查询结束";
}

/// <summary>
/// 查询终止提示
/// </summary>
private void SetInfoCancel()
{
this.tsLabelInfo.Text = "查询被终止。。。";
}

/// <summary>
/// 终止查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton2_Click(object sender, EventArgs e)
{
flagCancel = true;
tmyThrdGetdata.Abort();
tmyTrrdProcess.Abort();

this.BeginInvoke(new PDelegate(SetInfoCancel));
}

private void toolStripButton3_Click(object sender, EventArgs e)
{
if (tmyThrdGetdata.IsAlive) { tmyThrdGetdata.Abort(); }
if (tmyTrrdProcess.IsAlive) { tmyTrrdProcess.Abort(); }
Close();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值