求一个碉堡的多线程控制问题

happyapple002 2013-04-28 09:31:48
接到一个异常纠结的项目啊....死锁 锁的我纠结了

首先是个winform项目 ,所以为了避免界面卡死.必须做成多线程的,下面描述问题..纠结了烦请诸位有时间解答一下 ,

窗体发起多个请求到 类A..类A中有多个方法.每个方法都会调用资源B.所以仅能同时执行一个方法..
但某些个方法需要长时间等待回馈 或者无限长.必须等到回馈

所以目前的问题就是
1.如何确保在这种场景下 资源B 仅能被独占,.
2.同时 当资源B被独占时,窗体在某些条件下,需要 中断正在执行的某个方法 释放资源B ,重新执行新指令.

另外 如果执行以下语句
Thread thOther =null;
thOther = new Thread(new ParameterizedThreadStart(GetExplainStr));
thOther.IsBackground = true;
thOther.Start(wb);

thOther = new Thread(GetOrderInfoThread);
thOther.IsBackground = true;
thOther.Start(wb);

这样是开了两个线程么?
如果执行以下语句 是否就能释放掉以上进程所占用的资源..

thOther.Abort();
thOther = null;
...全文
106 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
showlin 2013-04-28
  • 打赏
  • 举报
回复
无限长的等待的话,建议另开一个线程进行监听,如果超过一段时间没有回馈,这时候中止线程
showlin 2013-04-28
  • 打赏
  • 举报
回复
类A中定义使用静态全局变量 static object LockObj=new object(); 然后在把每个使用资源b的代码用lock lock(LockObj) { //。。。。。。。。 } theother.Abort()仅能中止线程 如果你的theother有打开了其他资源,例如com组件等,还是要手动释放的, 建议写Dispose方法,统一using
juezhao007 2013-04-28
  • 打赏
  • 举报
回复
1.在wb方法中lock一下就可以使资源B被独占。 2.要释放时检测可能占用资源B的线程 abort()它.
足球中国 2013-04-28
  • 打赏
  • 举报
回复
可以在线程中使用回调那样做会简单一些。

110,534

社区成员

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

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

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