BackgroundWorker我该怎么debug

yunhaiC QQ654777694 2012-06-14 11:00:00
BackgroundWorker我该怎么debug?
我debug去单步跟踪的时候,光标跳来跳去的,我怎么追踪,请教下有没好办法
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

你的业务处理的几个程序,应该提取到一个BLL层工程项目中,使用console程序来测试它。
[/Quote]

我直接看我硬件里面接收到的数据,不是我发送的,不解原因。
是不是多线程的问题?
  • 打赏
  • 举报
回复
你的业务处理的几个程序,应该提取到一个BLL层工程项目中,使用console程序来测试它。
  • 打赏
  • 举报
回复
实际上软件开发不是调试出来的,而是自动测试出来的。不过也许你很少见到有用测试驱动方法开发的人,所以不会发现。在测试驱动开发方法下,很少需要调试,因为很多调试都不靠谱(就好象你遇到这种情况)。

在测试程序中执行测试用例,根本没有什么“跳来跳去”的控制逻辑。
  • 打赏
  • 举报
回复

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int iRet = -1;

while (!backgroundWorker1.CancellationPending)
{
short[] PriShortChamberRecipeArray = GetRecipeDataFromXml(@"C:\HuaYing\test.xml");
iRet = axActQJ71E71TCP1.WriteDeviceBlock2("R0", PriShortChamberRecipeArray.Length, ref PriShortChamberRecipeArray[0]);
}

}

private short[] GetRecipeDataFromXml(string filename)
{
DataTable table = new DataTable();
table.ReadXml(filename);


//this._lpsData = new short[(table.Rows.Count + 1) * 25];
short[] PriChamberRecipeArray = new short[(table.Rows.Count + 1) * 25];

for (int i = 0; i < table.Rows.Count; i++)
{
object[] objArr = table.Rows[i].ItemArray;

for (int j = 0; j < objArr.Length; j++)
{
if (objArr[j] == System.DBNull.Value)
{
if (j >= 1 && j <= 12)
objArr[j] = 1;
else
continue;
}
//this._lpsData[i * 25 + j] = short.Parse(objArr[j].ToString());
PriChamberRecipeArray[i * 25 + j] = short.Parse(objArr[j].ToString());

}
}
return PriChamberRecipeArray;
}



private void button3_Click(object sender, EventArgs e)
{
int iRet = -1;

while (true)
{
System.Threading.Thread.Sleep(100);
short[] PriShortChamberRecipeArray = GetRecipeDataFromXml(@"C:\HuaYing\test.xml");
iRet = axActQJ71E71TCP1.WriteDeviceBlock2("R0", PriShortChamberRecipeArray.Length, ref PriShortChamberRecipeArray[0]);

}
}


这两段代码都是用的硬件开发包自带的一个函数WriteDeviceBlock2向硬件发送数据。在异步程序里面发送数据就有问题,实际发送的数据并不是PriShortChamberRecipeArray,是比较随机的数据,太奇怪了,都只调用一个方法而已,不解原因
bdmh 2012-06-14
  • 打赏
  • 举报
回复
Work事件中加断点或异步函数中加断点
threenewbee 2012-06-14
  • 打赏
  • 举报
回复
先在单线程环境下调好,再写到BackgroundWorker呗。
__天涯寻梦 2012-06-14
  • 打赏
  • 举报
回复
BackgroundWorker.RunWorkerAsync();
后加上句
Thread.Sleep(-1);
先把主线程塞住,在 DoWork 事件的方法开始处断点,DoWork 调试正常后再把 Sleep 去掉让它们并行。

111,126

社区成员

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

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

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