3 回答
TA贡献1811条经验 获得超4个赞
乔·阿尔巴哈里(Joe Albahari)是开始阅读的好地方。
如果要创建自己的线程,这很简单:
using System.Threading;
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
/* run your code here */
Console.WriteLine("Hello, world");
}).Start();
TA贡献1803条经验 获得超3个赞
BackgroundWorker 似乎是您的最佳选择。
这是我的最小示例。单击按钮后,后台工作人员将开始在后台线程中工作,并同时报告其进度。工作完成后还将报告。
using System.ComponentModel;
...
private void button1_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
// this allows our worker to report progress during work
bw.WorkerReportsProgress = true;
// what to do in the background thread
bw.DoWork += new DoWorkEventHandler(
delegate(object o, DoWorkEventArgs args)
{
BackgroundWorker b = o as BackgroundWorker;
// do some simple processing for 10 seconds
for (int i = 1; i <= 10; i++)
{
// report the progress in percent
b.ReportProgress(i * 10);
Thread.Sleep(1000);
}
});
// what to do when progress changed (update the progress bar for example)
bw.ProgressChanged += new ProgressChangedEventHandler(
delegate(object o, ProgressChangedEventArgs args)
{
label1.Text = string.Format("{0}% Completed", args.ProgressPercentage);
});
// what to do when worker completes its task (notify the user)
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
delegate(object o, RunWorkerCompletedEventArgs args)
{
label1.Text = "Finished!";
});
bw.RunWorkerAsync();
}
注意:
为了简单起见,我使用C#的匿名方法将所有内容放在单个方法中,但是您始终可以将它们拉到其他方法中。
在ProgressChanged或 RunWorkerCompleted处理程序中更新GUI是安全的 。但是,从更新GUI DoWork 将导致 InvalidOperationException。
TA贡献1824条经验 获得超6个赞
快速又肮脏,但是可以使用:
在顶部使用:
using System.Threading;
简单的代码:
static void Main( string[] args )
{
Thread t = new Thread( NewThread );
t.Start();
}
static void NewThread()
{
//code goes here
}
我只是把它扔到一个新的控制台应用程序中
- 3 回答
- 0 关注
- 533 浏览
添加回答
举报