多线程的问题

小弟万元户 2011-08-11 09:43:28
有两个线程,其中一个线程出现异常时,另一个线程来捕获,怎么实现???不要用以下类似代码,要用.net框架下的封装好的(据说已经实现,可不知道如何做)
        List<jexception.JException> l = new List<jexception.JException>();
Thread t;
private object obj = new object();
public Form1()
{
InitializeComponent();
t = new Thread(ts);
t.Start();
try
{
throw new jexception.JException("ksks");
}
catch (jexception.JException e)
{
Add(e);
}
try
{
throw new jexception.JException("aaa");
}
catch (jexception.JException ex)
{
Add(ex);
}
}

private void Add(jexception.JException e)
{
lock (obj)
{
l.Add(e);
}
}

private void ts()
{
while (true)
{
if (l.Count > 0)
{
MessageBox.Show(l[0].Message);
l.RemoveAt(0);
}
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (!t.Equals(null)) t.Abort();
}
...全文
67 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chichenzhe 2011-08-11
  • 打赏
  • 举报
回复
.net自带的 throw exception 是利用你当前线程自身 进行工作.

.net没有提供一种你现在设想的机制: 发生异常的时候丢入一个系统默认的线程 或者丢进主线程 等等.

系统类库只会提供一些确有必要的公共方法和支持类,接口. 而不会提供你这样通用性,实用性,必要性都不强的东西.

所以,本身就只存在你贴出的代码一种方式来解决你这个需求:就是把异常对象丢入另外一个你定义的线程.

lifeixie 2011-08-11
  • 打赏
  • 举报
回复
这样的程序需要用辅助线程,而不是完全用同步线程。
lazyleland 2011-08-11
  • 打赏
  • 举报
回复
统一在AppDomain.CurrentDomain.UnhandledException里处理吧。
qldsrx 2011-08-11
  • 打赏
  • 举报
回复
只知道线程内部捕获,外部不行,不过内部捕获了可以传递给外部,要自己写代码。
小弟万元户 2011-08-11
  • 打赏
  • 举报
回复
有没有高手???

110,534

社区成员

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

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

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