当前位置:编程学习 > C#/ASP.NET >>

请问,线程A中新建了一个对象C,线程B中添加了对象C的引用,如何在线程B中调用C的某个函数,让这个函数在线程A中执行,谢谢!

请问,线程A中新建了一个对象C,线程B中添加了对象C的引用,如何在线程B中调用C的某个函数,让这个函数在线程A中执行,谢谢! --------------------编程问答-------------------- 事件
============== --------------------编程问答-------------------- A向B传一个委托,调用C。B调用这个委托。这样就是A在执行。

经典的例子就是在工作线程中调用Control.(Begin)Invoke更新界面。Control.Invoke在UI线程中执行 --------------------编程问答--------------------
引用 2 楼 caozhy 的回复:
A向B传一个委托,调用C。B调用这个委托。这样就是A在执行。

经典的例子就是在工作线程中调用Control.(Begin)Invoke更新界面。Control.Invoke在UI线程中执行


请问,在B线程里,调用 委托.Invokenvoke()就是在线程A里运行?
--------------------编程问答--------------------
引用 3 楼 corn8888 的回复:
Quote: 引用 2 楼 caozhy 的回复:

A向B传一个委托,调用C。B调用这个委托。这样就是A在执行。

经典的例子就是在工作线程中调用Control.(Begin)Invoke更新界面。Control.Invoke在UI线程中执行


请问,在B线程里,调用 委托.Invokenvoke()就是在线程A里运行?

是Control.Invoke,不是委托.Invoke
不过你可以用消息机制模仿这一点。 --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
Quote: 引用 3 楼 corn8888 的回复:

Quote: 引用 2 楼 caozhy 的回复:

A向B传一个委托,调用C。B调用这个委托。这样就是A在执行。

经典的例子就是在工作线程中调用Control.(Begin)Invoke更新界面。Control.Invoke在UI线程中执行


请问,在B线程里,调用 委托.Invokenvoke()就是在线程A里运行?

是Control.Invoke,不是委托.Invoke
不过你可以用消息机制模仿这一点。


我的对象C,不是控件,是普通的对象,

对于你刚才的回复,我是这样理解的,不知对不对?

线程A里,新建一个委托实例C,B线程里调用,C.Invoke(),然后委托就在线程A里运行?

不知对不对? --------------------编程问答--------------------
引用 5 楼 corn8888 的回复:
Quote: 引用 4 楼 caozhy 的回复:

Quote: 引用 3 楼 corn8888 的回复:

Quote: 引用 2 楼 caozhy 的回复:

A向B传一个委托,调用C。B调用这个委托。这样就是A在执行。

经典的例子就是在工作线程中调用Control.(Begin)Invoke更新界面。Control.Invoke在UI线程中执行


请问,在B线程里,调用 委托.Invokenvoke()就是在线程A里运行?

是Control.Invoke,不是委托.Invoke
不过你可以用消息机制模仿这一点。


我的对象C,不是控件,是普通的对象,

对于你刚才的回复,我是这样理解的,不知对不对?

线程A里,新建一个委托实例C,B线程里调用,C.Invoke(),然后委托就在线程A里运行?

不知对不对?


不对。

我让你模仿WinForms的做法,发消息通知。

Control.Invoke的原理是,由调用线程发出消息,并且阻塞运行,UI线程在消息循环中发现这个消息,调用委托执行,执行完成再取消工作线程的阻塞,工作线程继续执行。
Control.BeginInvoke类似,只是异步的。 --------------------编程问答--------------------
引用 6 楼 caozhy 的回复:
Quote: 引用 5 楼 corn8888 的回复:

Quote: 引用 4 楼 caozhy 的回复:

Quote: 引用 3 楼 corn8888 的回复:

Quote: 引用 2 楼 caozhy 的回复:

A向B传一个委托,调用C。B调用这个委托。这样就是A在执行。

经典的例子就是在工作线程中调用Control.(Begin)Invoke更新界面。Control.Invoke在UI线程中执行


请问,在B线程里,调用 委托.Invokenvoke()就是在线程A里运行?

是Control.Invoke,不是委托.Invoke
不过你可以用消息机制模仿这一点。


我的对象C,不是控件,是普通的对象,

对于你刚才的回复,我是这样理解的,不知对不对?

线程A里,新建一个委托实例C,B线程里调用,C.Invoke(),然后委托就在线程A里运行?

不知对不对?


不对。

我让你模仿WinForms的做法,发消息通知。

Control.Invoke的原理是,由调用线程发出消息,并且阻塞运行,UI线程在消息循环中发现这个消息,调用委托执行,执行完成再取消工作线程的阻塞,工作线程继续执行。
Control.BeginInvoke类似,只是异步的。


怎么感觉有点别扭,我的对象C不是控件,.........,然后还得添加一控件,才能实现这个功能,

请问有没有 简单、直接 一点的方法

谢谢

--------------------编程问答-------------------- 不要你添加控件。让你借鉴这种模式。 --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
不要你添加控件。让你借鉴这种模式。



“借鉴这种模式”
我不知道怎么........

请问哥们,哪有这方面的资料,或者google啥

谢谢 --------------------编程问答-------------------- 请问,通过线程间发消息,实现吗 --------------------编程问答-------------------- http://www.codeproject.com/Articles/348541/Asynchronous-Thread-Calls-With-Delegates --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
不要你添加控件。让你借鉴这种模式。


哥们,请问哪有 C# 线程间发消息的资料?

谢谢 --------------------编程问答-------------------- 线程间通信的问题 你的线程A就与对象C紧密结合了 你是不是需要把对象C和线程A做成一个对象了... 然后外部调用的时候 向你的对象内部的 任务队列加入一条 任务 线程A执行相关任务 等到线程A没有任务的时候就等待AutoEvent 就可以了 建议你查查线程间通信的问题 --------------------编程问答-------------------- 用委托 或者 事件 就可以了.

--------------------编程问答--------------------
引用 14 楼 wonderfuly 的回复:
用委托 或者 事件 就可以了.


请问如何实现?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,