c#winfrom 利用多线程插入数据 出现重复问题
DataTable dt;
BindingSource bs;
private void Form1_Load(object sender, EventArgs e)
{
dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("aa", typeof(string));
dt.Columns.Add("a", typeof(string));
dt.Columns.Add("b", typeof(string));
dt.Columns.Add("c", typeof(string));
dt.Columns.Add("d", typeof(string));
bs = new BindingSource();
bs.DataSource = dt;
this.dataGridView1.DataSource = bs;
}
string sturl;
int ip = 10;
private void button1_Click(object sender, EventArgs e)
{
//sturl = "http://127.0.0.1/MidasEvents1.htm";
//GetWebContent();
weburl wb;
for (int i = 1; i <= 50; i++)
{
ip++;
sturl = "http://127.0.0.1/MidasEvents" + i + ".htm";
wb=new weburl(sturl, ip, dt);
}
}
class weburl
{
MatchCollection mc;
DataRow dr;
int t = 0;
int sum = 0;
string sturl;
int ip;
DataTable dt;
public weburl(string stu,int p, DataTable ddt)
{
sturl = stu;
ip = p;
dt = ddt;
//创建线程
Thread thread = new Thread(new ThreadStart(GetWebContent));
thread.Name = "Thread"+p.ToString();
thread.Start();
}
private void GetWebContent()
{
t++;
try {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sturl);
//声明一个HttpWebRequest请求
//request.Timeout = 10000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("utf-8");
StreamReader streamReader = new StreamReader(streamReceive, encoding);
mc = Regex.Matches(streamReader.ReadToEnd(), @"(?i)(?<=<font.*?>)[^<]+(?=</font>)");
for (int i = 0; i < 4; i++)
{
t++;
dr = dt.NewRow();
dr["id"] = t.ToString();
dr["aa"]="192.168.1."+ip.ToString();
dr["a"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dr["b"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dr["c"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dr["d"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dt.Rows.Add(dr);
}
sum =0;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
for (int i = 0; i < 4; i++)
{
t++;
lock(dt)
{
dr = dt.NewRow();
dr["id"] = t.ToString();
dr["aa"]="192.168.1."+ip.ToString();
dr["a"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dr["b"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dr["c"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dr["d"] = mc[sum++].Groups[0].Value.Trim().Replace("/n", "").ToString();
dt.Rows.Add(dr);
}
}