c# 时钟 多线程

一品田园 2014-12-01 09:11:50
错误提示:
Application: 前置机软件.exe
Framework Version: v4.0.30128
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentException

问题描述:隔一个小时执行一个操作,操作主要完成对数据库里的数据进行打包,每次操作数据量在2万左右,执行时间5到10分钟。为了在执行打包操作时,界面不出现假死现象,故加入多线程操作。
//=============时间===================
try
{
if (isstart == "0")
{
isstart = "1";
Thread t = new Thread(StartFH);
t.IsBackground = true;
t.Start();
}
}
catch (Exception ex)
{
lvResult.Items.Insert(0, AddListViewItem("Error", "报文处理", ex.Message));
}
//=================
private void StartFH()
{
DcNewFh();
OracleHelper.InsertORIGINALDATABAK();
OracleHelper.DeleteORIGINALDATA();
isstart = "0";
}
//==================
分数不多了,60分大家分分吧。
...全文
328 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-12-01
  • 打赏
  • 举报
回复
吧循环放到线程里去 这样一个操作没有执行完,不执行下一个循环 很可能你的电脑配置高,可以在5-10分钟内线程执行完成 而客户电脑配置低,线程执行的慢 前一个操作没执行完,就又开启了一个线程,造成冲突
扯淡砖家 2014-12-01
  • 打赏
  • 举报
回复
那你应该试试打log文件。没找到错误的位置,神仙也没法子解决呀
Forty2 2014-12-01
  • 打赏
  • 举报
回复
引用 9 楼 dongxinxi 的回复:
你这样是捕获不到子线程的异常的,try-catch应该加在StartFH中,而不是Thread.Start()
看他的错误堆栈,恐怕try-catch加在StartFH内都捕获不到:) 建议:线程(包括异步回调)中的异常都应该得到处理(否则你的程序就死于未处理异常了)。
  • 打赏
  • 举报
回复
你这样是捕获不到子线程的异常的,try-catch应该加在StartFH中,而不是Thread.Start()
害羞的大叔 2014-12-01
  • 打赏
  • 举报
回复
看下客户数据,感觉是hashtable主键重复导致的。
一品田园 2014-12-01
  • 打赏
  • 举报
回复
引用 5 楼 wow818wow 的回复:
调用堆栈上看,似乎是插入哈希表的时候异常了?你会单步调试么?单步跑一跑吧
生下来就会单步调试,可是测试没问题,用户那才报这个错
那城 2014-12-01
  • 打赏
  • 举报
回复
单步调试,确定错误位置在哪。
扯淡砖家 2014-12-01
  • 打赏
  • 举报
回复
调用堆栈上看,似乎是插入哈希表的时候异常了?你会单步调试么?单步跑一跑吧
一品田园 2014-12-01
  • 打赏
  • 举报
回复
引用 3 楼 wow818wow 的回复:
你想解决异常,就要确定异常的位置,从这部分代码上似乎看不出来呀。
Application: 前置机软件.exe Framework Version: v4.0.30128 Description: The process was terminated due to an unhandled exception. Exception Info: System.ArgumentException Stack: at System.Collections.Hashtable.Insert(System.Object, System.Object, Boolean) at System.Windows.Forms.ListView.InsertItems(Int32, System.Windows.Forms.ListViewItem[], Boolean) at System.Windows.Forms.ListView+ListViewNativeItemCollection.Insert(Int32, System.Windows.Forms.ListViewItem) at System.Windows.Forms.ListView+ListViewItemCollection.Insert(Int32, System.Windows.Forms.ListViewItem) at 前置机软件.frmMain.OnSend(System.IAsyncResult) at System.Net.LazyAsyncResult.Complete(IntPtr) at System.Threading.ExecutionContext.runTryCode(System.Object) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Net.ContextAwareResult.Complete(IntPtr) at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32, UInt32, System.Threading.NativeOverlapped*) at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
扯淡砖家 2014-12-01
  • 打赏
  • 举报
回复
你想解决异常,就要确定异常的位置,从这部分代码上似乎看不出来呀。
一品田园 2014-12-01
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
private void StartFH() { try { DcNewFh(); OracleHelper.InsertORIGINALDATABAK(); OracleHelper.DeleteORIGINALDATA(); } catch(Exception e) { // log exception } isstart = "0"; }
这个只是能抛出异常,并不能解决根本问题
Forty2 2014-12-01
  • 打赏
  • 举报
回复
private void StartFH() { try { DcNewFh(); OracleHelper.InsertORIGINALDATABAK(); OracleHelper.DeleteORIGINALDATA(); } catch(Exception e) { // log exception } isstart = "0"; }

110,549

社区成员

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

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

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