嗨我有一个网络服务,它正在进行巨大的计算并且花费了一分多钟。长时间运行时泵信息+ C#
我已经生成了Web服务的代理文件,然后从我的客户端使用dll(当然,我生成了代理dll)。
我的客户端代码
TimeSeries3D t = new TimeSeries3D();
int portfolioId = 4387919;
string[] str = new string[2];
str[0] = "MKT_CAP";
DateRange dr = new DateRange();
dr.mStartDate = DateTime.Today;
dr.mEndDate = DateTime.Today;
Service1 sc = new Service1();
t = sc.GetAttributesForPortfolio(portfolioId, true, str, dr);
但由于它正在采取的很多时间服务器来计算,1分钟后,我收到了一条错误消息
的CLR已经无法从COM上下文0x33caf30转换到COM上下文0x33cb0a0 60秒。拥有目的地上下文/公寓的线程很可能要么进行非抽水等待,要么处理非常长的运行操作而不抽取Windows消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序无法响应或内存使用量不断累积。为了避免这个问题,所有的单线程单元(STA)线程都应该使用抽取等待原语(比如CoWaitForMultipleHandles),并在长时间运行的操作中定期抽取消息。
请指导我该怎么做?
感谢
但是我没有对服务的任何控制权。我只获得了我转换为.cs文件然后转换为.dll的WSDL文件。 – Newbie 2010-04-21 09:14:13
他的意思是从另一个线程调用Web服务,而不是调用Web服务的应用程序中的UI线程。 – Sekhat 2010-04-21 09:45:02
is this private void Form1_Load(object sender,EventArgs e){new Thread(new ThreadStart(GetTimeSeries3D))。Start(); }私人无效GetTimeSeries3D(){/ /代码}? – Newbie 2010-04-21 10:56:31