请教事件线程问题
这个很难说清,请高手耐心听小弟说,小弟的程序先要下载一个文件,把下载写在一个类(DownLoadclass)里边了,
所以当下载完成后线程回到这个类里,在这个类里激发一个自定义的downloadcompleted事件,通知mainpage,
在mainpage里有个函数(ParseData)使用刚刚下载的数据,在ParseData里要完成很多事情,但是ParseData一直是在事件的线程里,所以当这个函数要用到本地代码,比如修改UI的时候,就总是发生跨线程异常,当然这可以使用Dispatcher.BeginInvoke,
但是因为在ParseData里还要再去下载,所以线程越来越多,但总是不能回到主线程,最终因为数据原因Dispatcher.BeginInvoke也搞不定了,请教高手,有什么好的布局,也就是说如何能在第一次下载后回到主线程对数据处理,而不是使用事件呼叫mainpage?
以下是Download类中,在下载后的代码,
try
{
this.response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
using (System.IO.BinaryReader Stream = new System.IO.BinaryReader (this.response.GetResponseStream()))
{
this.dataBuffer = new byte[this.response.ContentLength];
Stream.Read(this.dataBuffer, 0, this.dataBuffer.Length);
Stream.Close();
this.response.Close(); }
if(!cancel)
DownLoadCompleted();//---------这里呼叫mainpage的ParseData,
//但是如果ParseData里要做很多事的画,代码就一直没有回归主线程,一直在事件处理线程里。
} --------------------编程问答-------------------- 在主窗口类把一个对象传给DownLoadclass类或创建一个公共的静态值,给这个静态值赋上本身对象,以后直接可以用这个
FMain.BeginInvoke,就可以了 --------------------编程问答-------------------- 需要调用UI的地方你要定义定义一个Delegate,一个方法(你原来访问UI的内容)
然后假如价格delegate 是DelegateCall(string s),方法是Call(string s)
那么你需要回调UI的地方用FMain.Invoke(new DelegateCall(Call),new object[]{s});
补充:.NET技术 , C#