我在调试4天后问这个问题所以请耐心等待。 :)
我有413条记录的列表(评论列表)
logger.Debug("For each comment convert from rtf to Html: " + commentsList.Count().ToString());
int c = 1;
foreach (var r in commentsList)
{
try
{
r.NotesLong = ConvertRtfToHtml(r.NotesLong);
logger.Debug("Done");
}
catch (Exception e)
{
logger.Error(e.Message);
}
finally {
logger.Debug(c.ToString() + " SID: " + r.StudentID.ToString() + " RID: " +r.ResultID.ToString() + " RTID: " + r.ResultTypeID.ToString());
c++;
}
if (r.Color == null)
r.Color = "FFFFFF";
}
logger.Debug("Completed notes long conversion");
我第一次运行它时会返回所有记录。 然而,第二次,它被卡在记录303(无论我尝试多少次在同一记录停止)。没有例外,但循环突然停止[记录303没有错误的数据] ..这可能是一个线程问题,但每次记录应该不同?
ConvertRtfToHtml
public string ConvertRtfToHtml(string rtfText)
{
try
{
var thread = new Thread(ConvertRtfInSTAThread);
logger.Debug("ConvertRtfInSTAThread");
var threadData = new ConvertRtfThreadData { RtfText = rtfText };
logger.Debug("ConvertRtfThreadData");
thread.SetApartmentState(ApartmentState.STA);
logger.Debug("SetApartmentState");
thread.Start(threadData);
thread.Join();
logger.Debug("return html text");
return threadData.HtmlText;
}
catch (Exception e){
logger.Error("ConvertRtfToHtml: " + e.Message);
return "Error";
}
}
在上面的代码中,出现了以下两行中的一些问题
thread.Start(threadData);
thread.Join();
日志如下
.........
2017-08-03 12:14:38,952 [8]调试 - 完成
2017-08-03 12:14:38,952 [8] DEBUG - 302 SID:164 RID:44380 RTID:48
2017-08-03 12:14:38,952 [8] DEBUG - ConvertRtfInSTAThread
2017-08-03 12:14:38,952 [8] DEBUG -ConvertRtfThreadData
2017-08-03 12:14:38,952 [8] DEBUG -SetApartmentState
2017-08-03 12:14:38,956 [8] DEBUG - 返回html文字
2017-08-03 12:14:38,956 [8]调试 - 完成
2017-08-03 12:14:38,956 [8] DEBUG - 303 SID:166 RID:44381 RTID:14
2017-08-03 12:14:38,956 [8] DEBUG - ConvertRtfInSTAThread
2017-08-03 12:14:38,956 [8] DEBUG - ConvertRtfThreadData
2017-08-03 12:14:38,956 [8] DEBUG -SetApartmentState
问题发生在加入时。所以我改变了如下功能
public string ConvertRtfToHtml(string rtfText)
{
try
{
var thread = new Thread(ConvertRtfInSTAThread);
var threadData = new ConvertRtfThreadData { RtfText = rtfText };
thread.SetApartmentState(ApartmentState.STA);
logger.Debug("SetApartmentState");
thread.Start(threadData);
try
{
thread.Join();
}
catch(ThreadStateException e){
logger.Error("ThreadStateException " + e.Message);
}
catch (ThreadInterruptedException e) {
logger.Error("ThreadInterruptedException " + e.Message);
}
logger.Debug("return html text");
return threadData.HtmlText;
}
catch (Exception e){
logger.Error("ConvertRtfToHtml: " + e.Message);
return "Error";
}
}
仍然没有记录异常,但主要的Action方法再次启动......这是怎么回事?
答案 0 :(得分:0)
好!!我在ConvertRtfInSTAThread函数中添加了一个try / catch,并发现它在元素302之后开始抛出所有项目的异常,即在303及之后......
例外:
303:操作成功完成
304:没有足够的存储空间来处理此命令
305:操作成功完成
306:操作成功完成
.......
314:操作成功完成
现在没有应用程序挂起但是什么样的例外 这个(操作成功完成)?我可以删除存储空间吗? 问题