在TaskScheduler上一次运行一个线程(STA线程)

时间:2020-01-30 16:30:36

标签: c# multithreading task task-parallel-library taskfactory

我将StaTaskScheduler线程设置为1,我希望每5秒可以得到一个Debug输出,但是最后我得到10个具有相同日期的

_kTabBarHeight

我想念什么?使用STA的原因是,以后它将用于需要STA的图标提取,但是此测试是要检查它是否按顺序完成。

1 个答案:

答案 0 :(得分:-2)

您必须使用MyStaThred.QueueTask而不是Task.Factory.Startnew来开始任务:

private void Test() {
    for (int i = 0; i < 10; i++)
        MyStaThread.QueueTask(new Task(() =>
        {
            Task.Delay(5000); //temp for long operation
            Debug.WriteLine(DateTime.Now);
        }));
}

public static StaTaskScheduler MyStaThread = 
        new StaTaskScheduler(numberOfThreads: 1);

Task.Factory.Startnew使用.Net Framework内部线程池,并且不考虑StaTaskScheduler