多线程问题

雨纷纷 2017-07-15 03:30:52
thread = new Thread(new ThreadStart(delegate
{
DoService();
}));
thread.Start();

//

while (!bStop)
{
FileInfo fi = new FileInfo(zfilename);
string[] arr;
string line;
if (fi.Length != 0)
{
strem = new StreamReader(zfilename, Encoding.Default);
while ((line = strem.ReadLine()) != null)
{
strx = line.ToString();
if (strx != "")
{
arr = strx.Split(',');
string aa = arr[0].ToString();
string bb = arr[1].ToString();
DateTime dt1 = Convert.ToDateTime(aa);
DateTime dt2 = Convert.ToDateTime(bb);
float date = DateDiff(dt2, dt1);//计算时间差
TimeSpan am = DateTime.Parse(aa).TimeOfDay;
TimeSpan pm = DateTime.Parse(bb).TimeOfDay;
string t1 = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString();
DateTime t2 = Convert.ToDateTime(t1);
TimeSpan t3 = t2.TimeOfDay;
// if (System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(DateTime.Now.DayOfWeek) == "星期日")//每到星期一自动清理listMessage
// {

if (DateTime.Now.ToString("HH:mm").IndexOf("10:36") >= 0 || DateTime.Now.ToString("HH:mm").IndexOf("19:36") >= 0 || DateTime.Now.ToString("HH:mm").IndexOf("23:36") >= 0)
{
this.BeginInvoke(clearlist);//清除listMessage
}

// }
if (t3>am&&t3<pm)
{
startup();
this.BeginInvoke(upbtn, "开始接收服务");
this.BeginInvoke(grd);
startcount = 0;
Thread.Sleep(Convert.ToInt32(date)*60*1000);//设置休眠时间

}
else
{
/* startcount++;
if(startcount==1)
{
startup();

}*/
bStop = false;
this.BeginInvoke(upbtn, "停止接收服务");
if (textBox1.Text != null)
{

System.Threading.Thread.Sleep(1000 * Convert.ToInt32(textBox1.Text));

}
else
{

System.Threading.Thread.Sleep(1000 * Convert.ToInt32(sztime1));

}
WakeUp();///耗时操作
}
}
}
strem.Close();
strem.Dispose();
}

这样会界面卡一会 怎么才能不卡
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2017-07-17
  • 打赏
  • 举报
回复
你直接sleep主线程,怎么会不卡呢,即便要用sleep也应该在子线程中
雨纷纷 2017-07-17
  • 打赏
  • 举报
回复
是不是和连接的机器有时候连不上有关系呢 这是线程中的方法 int count = dataGridView2.Rows.Count; for (int i = 0; i < count; i++) { DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView2.Rows[i].Cells[0]; Boolean flag = Convert.ToBoolean(checkCell.Value); if (flag == true) { ip1 = this.dataGridView2.Rows[i].Cells[2].Value.ToString(); iMachineNumber1 = Convert.ToInt32(this.dataGridView2.Rows[i].Cells[1].Value.ToString()); bool bResult = axCZKEM1.Connect_Net(ip1, 4370); if (!bResult)//Connecting device failed. { continue; } else { iConnectedCount++;//count of connected devices axCZKEM1.EnableDevice(iMachineNumber1, false); if (axCZKEM1.ReadAllGLogData(iMachineNumber1)) { iGLCount++; string sdwEnrollNumber = ""; int sdwVerifyMode = 0; int sdwInOutMode = 0; int sdwYear = 0; int sdwMonth = 0; int sdwDay = 0; int sdwHour = 0; int sdwMinute = 0; int sdwSecond = 0; int sdwWorkcode = 0; while (axCZKEM1.SSR_GetGeneralLogData(iMachineNumber1, out sdwEnrollNumber, out sdwVerifyMode, out sdwInOutMode, out sdwYear, out sdwMonth, out sdwDay, out sdwHour, out sdwMinute, out sdwSecond, ref sdwWorkcode))//get user Log from memory { if (sdwMonth < 10) { tempM = "0" + sdwMonth.ToString(); } else { tempM = sdwMonth.ToString(); } if (sdwDay < 10) { tempD = "0" + sdwDay.ToString(); } else { tempD = sdwDay.ToString(); } if (sdwHour < 10) { tempH = "0" + sdwHour.ToString(); } else { tempH = sdwHour.ToString(); } if (sdwMinute < 10) { tempMm = "0" + sdwMinute.ToString(); } else { tempMm = sdwMinute.ToString(); } if (sdwSecond < 10) { tempS = "0" + sdwSecond.ToString(); } else { tempS = sdwSecond.ToString(); } string carddate = sdwYear.ToString() + "-" + tempM + "-" + tempD; DateTime carddate1 = Convert.ToDateTime(carddate); string cardtime = tempH + ":" + tempMm + ":" + tempS; string Originaldata = iMachineNumber1 + " " + sdwEnrollNumber + " " + carddate + " " + cardtime; if (DBmethod.getInfo(Originaldata)) { continue; } else { DateTime now = DateTime.Now; bool b = DBmethod.insertData(Originaldata, iMachineNumber1.ToString(), sdwEnrollNumber, carddate1, cardtime, now, sdwEnrollNumber);//插入数据库 if (b) { xcount++; jcount++; this.BeginInvoke(upformx, new object[] { xcount.ToString(), iMachineNumber1.ToString(), sdwEnrollNumber.ToString(), carddate.ToString() + " " + cardtime.ToString() }); } } } this.BeginInvoke(gridview, new object[] {i,jcount}); scount += jcount; lcount +=jcount; } else { continue; } axCZKEM1.EnableDevice(iMachineNumber1, true);//enable the device axCZKEM1.Disconnect(); jcount = 0; iGLCount = 0; } } else { continue; }
exception92 2017-07-15
  • 打赏
  • 举报
回复
界面卡说明有代码逻辑阻塞UI线程,应该检查线程执行方法中的代码。
Anonymous477 2017-07-15
  • 打赏
  • 举报
回复
看看你BeginInvoke那几个委托做了什么操作

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧