gpt4 book ai didi

multithreading - WinRT API 中是否有与 Android 处理程序等效的东西?

转载 作者:行者123 更新时间:2023-12-02 19:54:11 29 4
gpt4 key购买 nike

Android 提供了 Handler在单个线程上串行运行任务(类型为 RunnableMessage )的类。我试图在 Windows 应用商店应用程序中重现这种确切的行为,我看到的唯一类是 ThreadPoolThreadPoolTimer我相信它提供了对后台线程池的访问,但我想要的是对单个后台线程的访问。

如果 WinRT API 无法实现,那么 the allowed Win32 API's 又如何呢? ?

所有这些麻烦的原因是我有一个旧的 C++ 库,它只能安全​​地在单个线程上运行,但我不想在 UI 线程上运行它,因为它可能会阻塞它。很多时候我想将一堆任务排队以便让库执行。 Android 中的 Handler 非常适合此操作。

最佳答案

这是我对 Android 处理程序的简单实现(至少我已经尽力了):

public class Handler
{
private static readonly BlockingCollection<Action> queue = new BlockingCollection<Action>();

static void Loop()
{
while (true)
{
Action task = queue.Take();

if (task == null) break;

task();
}
}

static Handler()
{
Thread thread = new Thread(Loop);
thread.Name = "Handler";
thread.Start();
}

public static void Post(Action task)
{
queue.Add(task);
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Launching tasks");

Handler.Post(() => { Console.WriteLine("Running task 1..."); Thread.Sleep(1000); Console.WriteLine("Task 1 done."); });
Handler.Post(() => { Console.WriteLine("Running task 2..."); Thread.Sleep(3000); Console.WriteLine("Task 2 done."); });
Handler.Post(() => { Console.WriteLine("Running task 3..."); Thread.Sleep(2000); Console.WriteLine("Task 3 done."); });
Handler.Post(null);

Console.WriteLine("Waiting end of tasks");
}
}

它符合您的需求吗?

关于multithreading - WinRT API 中是否有与 Android 处理程序等效的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096669/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com