System.Threading.Thread -对其执行操作

本文关键字:执行 操作 Threading Thread System | 更新日期: 2023-09-27 18:03:48

假设我所有的都是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);
}

DrawToBackBuffer在线程B上被调用,al_draw_bitmap需要在线程A上被调用,我有一个引用。我如何在线程A上做到这一点?线程B只是我执行任务时c#生成的一些线程。在托管代码中运行

System.Threading.Thread -对其执行操作

线程从头到尾运行一组指令。如果线程A已经在运行,它将执行从头到尾被告知运行的任何代码。您将无法更改它正在运行的内容,除非它正在主动监视某些共享内存,以获取下一步操作的指令。通常实现这一点的方法是让线程在循环中运行,并在该循环中检查消息队列。然后让其他线程将消息添加到该队列中,让循环线程完成工作。要使其正常工作还有很多细节,但这是基本思想。

如果,在您的特定场景中,线程A是应用程序的GUI线程,那么这个消息传递机制已经为您设置好了,您可以使用Control.Invoke (winforms)或Dispatcher.Invoke (WPF)将一个工作单元传递给GUI线程并等待它完成。

编辑:由于问题中添加了新的信息,这个答案变得不那么适用了。啊好。