我有一些代码需要在与GUI不同的线程中运行,因为它当前导致表单在代码运行时冻结(10秒左右).
假设我以前从未创建过新的线程; 什么是如何在C#中使用.NET Framework 2.0或更高版本执行此操作的简单/基本示例?
我目前正试图用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)
所有工作都按顺序在同一个新线程上进行,这不是我所期待的.
我假设我错过了什么,但我无法弄清楚是什么.