委托异步调用提前终止,该如何解决
发布时间:2011-06-21 11:31:58 文章来源:www.iduyao.cn 采编人员:星星草
委托异步调用提前终止
在一个控制台程序里,定义一个委托加入一个方法实例化后,用BeginInvoke进行异步调用,同时增加一个回调方法,回调方法里面用EndInvoke结束异步调用,如下面代码所示。但是执行的时候,程序一闪就完了,加入委托的方法根本不执行。为了能让控制台程序不至于一闪就执行完,我在程序的最后加入readkey,使主程序停在那里,一段时间后检查,增加到委托里面的方法执行了。这个问题很奇怪,难道是需要设置组线程为前台线程,怎么管理主线程与工作线程之间的关系呢? 委托的BeginInvoke 应该是工作线程执行委托里面的方法吧。
(注:增加到委托里面的方法有两个线程,分别向不同的数据库更新数据)
private delegate void DelegateDispatchMsg(string DataGroup, string ReferenceId, List<MsgInfo> Msgs, int NumberOfMessages);
DelegateDispatchMsg delegateDispatchMsg = new DelegateDispatchMsg(DispatchMsg);
delegateDispatchMsg.BeginInvoke(DataGroup, ReferenceId, Msgs, NumberOfMessages, new AsyncCallback(CallBackMethod), list);
Console.ReadKey();//为增加主线程的执行时间
private void CallBackMethod(IAsyncResult ar)
{
ArrayList list = (ArrayList)ar.AsyncState;
string DataGroup = (string)list[0];
string ReferenceId = (string)list[1];
List<MsgInfo> Msgs = (List<MsgInfo>)list[2];
int NumberOfMessages = (int)list[3];
DateTime start = (DateTime)list[4];
DelegateDispatchMsg delegateDispatchMsg = (DelegateDispatchMsg)list[5];
delegateDispatchMsg.EndInvoke(ar);
if (_IsSuccessful)
Log.DBLog(ReferenceId, DataGroup, NumberOfMessages, start, DateTime.Now, "S");
else
Log.DBLog(ReferenceId, DataGroup, NumberOfMessages, start, DateTime.Now, "F");
}
------解决方案--------------------
这个问题很奇怪,难道是需要设置组线程为前台线程,怎么管理主线程与工作线程之间的关系呢?
>>>>>>>>>
我就不知道这里有啥奇怪的
你不是已经知道了吗?
BeginInvoke方法会在线程池里开一个线程来执行,而线程池的线程是后台线程,无法维持进程,所以当主线程结束的时候,后台线程也被迫终止了,当你加了ReadKey之后,由于主线程存在,所以后台线程能正常工作
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
C#读取文本并入库
文本格式固定如下:
**********************:
<中文作者一>=赵逢玲
<中文作者二>=杜秀华
<中文作者三>=王翠东
<中...
-
C#操作Word文档(Office 2007)
首先引入类库,Microsoft.Office.Interop.Word,然后进行编程。代码如下:
using ...
-
请问,ReadLine方法读取文件
一个txt文件,有两行
aaaa
bbbb
代码:
string s1 = @"D:iosamplepp.txt";
using (StreamReader sr = new...
-
验证控件
在gridview页脚行添加了验证控件,可是点击编辑更新时触发了验证事件,无法更新,怎么办?
------解决方案-------------------...
-
在BITMAP上用GDI+画图,如何使画出的图像尽可能清晰?
我在一张bitmap上用GDI+绘制了简单的多边形,并用PictureBox显示。
我发现,如果我...
-
???如何利用webbrower获取ifream元素????
如何利用webbrower获取ifream元素.我在GOOGLE,BAIDU一整天依然无法找到解决方法!!希望各...
-
如何解决“已有打开的与此命令相关联的DataReader,必须首先将它关闭。”错误?
小弟写了一个DBHelper类来控制数据库访问,但是在实际...
-
在做asp.net项目时,在做数据库更新时出现',' 附近有语法错误。(数据库是用sql2000的)
数据库更新语句:
public void Update()
...
-
为什么我这段代码不会发出声音呢?
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
usi...
-
ClickOnce 不支持请求执行级别requireAdministrator
写了一个应用程序,使用ServiceController控制 windows服务的的启动和停止。
...