分享

WinForm多线程及委托防止界面假死

 ThinkTank_引擎 2016-05-01
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;


namespace WindowsFormsApplication1
{
public partial class FormMain : Form
{
DataTable table;
int currentIndex = 0;
int max = 10000;
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled
= false;
Thread thread
= new Thread(new ThreadStart(LoadData));
thread.IsBackground
= true;
thread.Start();

progressBar1.Minimum
= 0;
progressBar1.Maximum
= max;
}
private void LoadData()
{
SetLableText(
"数据加载中...");
currentIndex
= 0;
table
= new DataTable();
table.Columns.Add(
"id");
table.Columns.Add(
"name");
table.Columns.Add(
"age");
while (currentIndex < max)
{
SetLableText(
string.Format("当前行:{0},剩余量:{1},完成比例:{2}%", currentIndex, max - currentIndex,
(Convert.ToDecimal(currentIndex)
/ Convert.ToDecimal(max) * 100).ToString("f0")));
SetPbValue(currentIndex);
DataRow dr
= table.NewRow();
dr[
"id"] = currentIndex;
string name = "张三";
dr[
"name"] = name;
dr[
"age"] = currentIndex + 5;
table.Rows.Add(dr);
currentIndex
++;
}
SetDgvDataSource(table);
SetLableText(
"数据加载完成!");

this.BeginInvoke(new MethodInvoker(delegate()
{
button1.Enabled
= true;
}));
}
delegate void labDelegate(string str);
private void SetLableText(string str)
{
if (label1.InvokeRequired)
{
Invoke(
new labDelegate(SetLableText), new string[] { str });
}
else
{
label1.Text
= str;
}
}
delegate void dgvDelegate(DataTable table);
private void SetDgvDataSource(DataTable table)
{
if (dataGridView1.InvokeRequired)
{
Invoke(
new dgvDelegate(SetDgvDataSource), new object[] { table });
}
else
{
dataGridView1.DataSource
= table;
}
}
delegate void pbDelegate(int value);
private void SetPbValue(int value)
{
if (progressBar1.InvokeRequired)
{
Invoke(
new pbDelegate(SetPbValue), new object[] { value });
}
else
{
progressBar1.Value
= value;
}
}
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多