backgroundworker问题!高分急求!

hai22545 2012-11-15 05:21:42
我用VS自带多线程控件写了个程序,往listview里面填数据时界面会卡死,并且多线程只运行一次就没了,高分求大神解答指导,请看代码: //调用接口
private void checkRead(string epc_code)
{
try
{
string err = string.Empty;

bool ret = false;
SmartLinkWS smart = new SmartLinkWS();
ret = smart.Check_SF_IsAlarm(epc_code, GlobalVar.localPara.DeviceNo, ref err);
if (ret == false)
{
return;
}

else
{
//如果为flase 先循环列表有没有,如果有,比对时间是否在10秒内
if (inventoryList.Items.Count > 0)
{
bool flag = false;

for (int i = 0; i < inventoryList.Items.Count; i++)
{
string temp = inventoryList.Items[i].SubItems[0].Text;
if (epc_code == temp) //如果有
{
flag = true;
string epctime = inventoryList.Items[i].SubItems[1].Text;
DateTime time1 = Convert.ToDateTime(epctime);

TimeSpan ts = DateTime.Now - time1;
if (Convert.ToInt32(ts.TotalSeconds) > 10) //判断时间是否大于10秒 是报警
{
m_ReaderAPI.Config.GPO[2].PortState = GPOs.GPO_PORT_STATE.TRUE;
m_ReaderAPI.Config.GPO[2].PortState = GPOs.GPO_PORT_STATE.FALSE;
}

break;
}
ListViewItem item = new ListViewItem(epc_code);

//加入扫描时间
item.SubItems.Add(DateTime.Now.ToString());

//加入扫描机器号
item.SubItems.Add(txtNo.Text);



inventoryList.Items.Add(item);
}

if (flag == false)
{
m_ReaderAPI.Config.GPO[2].PortState = GPOs.GPO_PORT_STATE.TRUE;
m_ReaderAPI.Config.GPO[2].PortState = GPOs.GPO_PORT_STATE.FALSE;

ListViewItem item = new ListViewItem(epc_code);

//加入扫描时间
item.SubItems.Add(DateTime.Now.ToString());

//加入扫描机器号
item.SubItems.Add(txtNo.Text);



inventoryList.Items.Add(item);

////刷新列表
//inventoryList.BeginUpdate();
////停止刷新列表
//inventoryList.EndUpdate();
}
//MessageBox.Show("OK1");
}

else
{
m_ReaderAPI.Config.GPO[2].PortState = GPOs.GPO_PORT_STATE.TRUE;
m_ReaderAPI.Config.GPO[2].PortState = GPOs.GPO_PORT_STATE.FALSE;

ListViewItem item = new ListViewItem(epc_code);
//加入扫描时间
item.SubItems.Add(DateTime.Now.ToString());

//加入扫描机器号
item.SubItems.Add(txtNo.Text);


inventoryList.Items.Add(item);
//MessageBox.Show("OK");

////刷新列表
////inventoryList.BeginUpdate();
////停止刷新列表
////inventoryList.EndUpdate();
}
}
}
catch (Exception ex)
{
MessageBox.Show("调用接口错误:" + ex.Message);
return;
}
}

// 多线程doworker事件
private void connectWorker_DoWork(object sender, DoWorkEventArgs connectEvent)
{
BackgroundWorker bw = sender as BackgroundWorker;

frmMain win = connectEvent.Argument as frmMain;

int i = 0;

while (i <= 100)
{

if (bw.CancellationPending)
{

connectEvent.Cancel = true;

break;

}


bw.ReportProgress(i++);
Thread.Sleep(1000);



}


}

//操作界面
private void connectWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
int progress = e.ProgressPercentage;

if (m_IsConnected)
{
Symbol.RFID3.TagData[] tagData = m_ReaderAPI.Actions.GetReadTags(1000);
if (tagData != null)
{
for (int nIndex = 0; nIndex < tagData.Length; nIndex++)
{
if (tagData[nIndex].OpCode == ACCESS_OPERATION_CODE.ACCESS_OPERATION_NONE ||
(tagData[nIndex].OpCode == ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ &&
tagData[nIndex].OpStatus == ACCESS_OPERATION_STATUS.ACCESS_SUCCESS))
{
Symbol.RFID3.TagData tag = tagData[nIndex];
tagID = tag.TagID;
checkRead(tagID);
}
}
}
}

}

private void connectWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{


if (e.Error != null)
{

MessageBox.Show("Error");

}

else if (e.Cancelled)
{


MessageBox.Show("Canceled");

}

else
{


MessageBox.Show("Completed");

}
}
现在问题是在往listview里面填数据时界面会卡死,并且多线程只运行一次就没了,高分求大神解答指导
...全文
63 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111,104

社区成员

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

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

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