我有一些代码,我需要运行在不同的线程,而不是GUI,因为它目前导致窗体冻结,而代码运行(10秒左右)。

假设我以前从未创建过一个新线程;有什么简单/基本的例子,如何做到这一点在c#和使用。net Framework 2.0或更高版本?


当前回答

又快又脏,但很管用:

用于顶部:

using System.Threading;

简单的代码:

static void Main( string[] args )
{
    Thread t = new Thread( NewThread );
    t.Start();
}

static void NewThread()
{
    //code goes here
}

我只是将其放入一个新的控制台应用程序中作为示例

其他回答

又快又脏,但很管用:

用于顶部:

using System.Threading;

简单的代码:

static void Main( string[] args )
{
    Thread t = new Thread( NewThread );
    t.Start();
}

static void NewThread()
{
    //code goes here
}

我只是将其放入一个新的控制台应用程序中作为示例

在. net中有许多运行独立线程的方法,每种方法都有不同的行为。你需要在GUI退出后继续运行线程吗?您需要在线程和GUI之间传递信息吗?线程是否需要更新GUI?线程应该完成一个任务然后退出,还是继续运行?这些问题的答案会告诉你该使用哪种方法。

在Code Project网站上有一篇很好的异步方法文章,描述了各种方法并提供了示例代码。

注意,本文是在async/await模式和任务并行库引入。net之前编写的。

如果你打算使用原始线程对象,那么你需要将IsBackground设置为true,你还应该设置Threading Apartment模型(可能是STA)。

public static void DoWork()
{
    // do some work
}

public static void StartWorker()
{
    Thread worker = new Thread(DoWork);
    worker.IsBackground = true;
    worker.SetApartmentState(System.Threading.ApartmentState.STA);
    worker.Start()
}

如果你需要UI交互,我会推荐BackgroundWorker类。

尝试使用BackgroundWorker类。您为它指定要运行的内容,并在工作完成时通知它。在我链接到的MSDN页面上有一个例子。

这是另一种选择:

Task.Run(()=>{
//Here is a new thread
});