好吧,让我说我所拥有的是System.Threading.Thread的引用,称为线程A,我在另一个线程上,让我们说线程B.现在我需要在线程A上执行一些代码那一刻,然后转回去。使用我的参考,如何调用线程A在其中执行操作?
我正在制作一个c ++ / cli库。我的一个对象具有线程亲和力。我输入一个方法,我需要像在Dispatcher.Invoke中那样交换线程。
void AllegroSharp::Display::DrawToBackBuffer(BitmapImage^ image)
{
al_draw_bitmap(image->GetBitmap(), (float)image->Rect->Position->X, (float)image->Rect->Position->Y, 0);
}
在线程B上调用DrawToBackBuffer,需要在线程A上调用al_draw_bitmap,我有一个引用。我怎么能在线程A上这样做?线程B只是在托管代码中执行Task.Run时c#生成的一些线程。
答案 0 :(得分:1)
线程从头到尾运行一组指令。如果线程A已经运行,它将执行它被告知从头到尾运行的任何代码。除非主动监视某些共享内存以获取有关下一步操作的说明,否则您无法更改其运行的内容。通常,您实现此方法的方法是让一个线程在一个循环中运行,并在该循环内部检查一个消息队列。然后让其他线程向该队列添加消息,以使循环线程能够工作。有很多细节可以使它正常工作,但这是基本的想法。
如果在您的特定情况下,线程A是应用程序的GUI线程,则已经为您设置了此消息传递机制,您可以使用Control.Invoke
(winforms)或{{1} (WPF)将一个工作单元传递给GUI线程并等待它完成。
编辑:通过在问题中添加新信息,此答案的适用性降低。好吧。