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();
}
}