Хорошо, поэтому давайте скажем, что у меня есть ссылка на System.Threading.Thread, называемый потоком A, и я нахожусь в другом потоке, скажем, поток B. Теперь мне нужно немного выполнить код в потоке A, а затем вернуться обратно. Используя ссылку, которую я имею, как я могу вызвать поток A, чтобы сделать в нем действие?System.Threading.Thread - выполнить операцию на нем
Ну, я делаю библиотеку C++/cli. Один из моих объектов имеет сходство потоков. Я ввожу метод, мне нужно поменять потоки, как в Диспетчере.Invoke.
void AllegroSharp::Display::DrawToBackBuffer(BitmapImage^ image)
{
al_draw_bitmap(image->GetBitmap(), (float)image->Rect->Position->X, (float)image->Rect->Position->Y, 0);
}
DrawToBackBuffer вызывается на нити В и al_draw_bitmap должен быть вызван на тему А, что у меня есть ссылка на. Как я могу это сделать в потоке A? Thread B - это просто поток, который C# породил, когда я сделал Task.Run в управляемом коде.
Это Winforms, WPF или что-то еще? –
Выполнение произвольного кода на * конкретном * потоке вообще не возможно. Если нить не взаимодействует, она должна решить проблему [производитель-потребитель] (https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem). Занимает поточную цепочку и цикл в потоке, который освобождает его. Любой поток может добавлять элементы в очередь, например, объект делегата. Пользовательский интерфейс GUI-программы всегда решает его, принимает Control :: Begin/Invoke() или Dispatcher :: Begin/Invoke(), возможно, о чем вы действительно спрашиваете. –
Будет ли шаблон дизайна Blackboard делать то, что вы хотите? https://en.wikipedia.org/wiki/Blackboard_(design_pattern) – EJoshuaS