相关疑难解决方法(0)

如何在新线程中运行一小段代码?

我有一些代码需要在与GUI不同的线程中运行,因为它当前导致表单在代码运行时冻结(10秒左右).

假设我以前从未创建过新的线程; 什么是如何在C#中使用.NET Framework 2.0或更高版本执行此操作的简单/基本示例?

.net c# multithreading

326
推荐指数
10
解决办法
40万
查看次数

NewThreadScheduler.Default计划在同一个线程上的所有工作

我目前正试图用RX .NET来解决并发问题,并对某些事情感到困惑.我想并行运行四个相对较慢的任务,所以我认为NewThreadScheduler.Default这是要走的路,因为它"代表一个在一个单独的线程上调度每个工作单元的对象"..

这是我的设置代码:

    static void Test()
    {
        Console.WriteLine("Starting. Thread {0}", Thread.CurrentThread.ManagedThreadId);

        var query = Enumerable.Range(1, 4);
        var obsQuery = query.ToObservable(NewThreadScheduler.Default);
        obsQuery.Subscribe(DoWork, Done);

        Console.WriteLine("Last line. Thread {0}", Thread.CurrentThread.ManagedThreadId);
    }

    static void DoWork(int i)
    {
        Thread.Sleep(500);
        Console.WriteLine("{0} Thread {1}", i, Thread.CurrentThread.ManagedThreadId);
    }

    static void Done()
    {
        Console.WriteLine("Done. Thread {0}", Thread.CurrentThread.ManagedThreadId);
    }
Run Code Online (Sandbox Code Playgroud)

我假设"X线程Y"每次都会输出不同的线程ID,但实际输出是:

Starting. Thread 1
Last line. Thread 1
1 Thread 3
2 Thread 3
3 Thread 3
4 Thread 3
Done. Thread 3
Run Code Online (Sandbox Code Playgroud)

所有工作都按顺序在同一个新线程上进行,这不是我所期待的.

我假设我错过了什么,但我无法弄清楚是什么.

c# concurrency system.reactive

8
推荐指数
1
解决办法
2726
查看次数

标签 统计

c# ×2

.net ×1

concurrency ×1

multithreading ×1

system.reactive ×1