我正在使用
创建一个帖子public static void Invoke(ThreadStart method)
{
Thread th = default(Thread);
try
{
th = new Thread(method);
th.Start();
}
catch (Exception ex)
{ }
}
我将其称为
Invoke(new Threading.ThreadStart(method_name));
在WPF中,我需要该线程所做的不应该挂起UI(即ASync线程应该启动)。我该怎么办?
答案 0 :(得分:2)
如果您使用.net 4.5,则可以
Task.Run( () =>
{
// your code here
});
在.net 4.0中你可以这样做:
Task.Factory.StartNew(() =>
{
// your code here
},
CancellationToken.None,
TaskCreationOptions.DenyChildAttach,
TaskScheduler.Default);
答案 1 :(得分:1)
如果您只使用Thread fore response UI,请查看System.ComponentModel.BackgroundWorker
这通常用于响应式用户界面
如果您使用最新版本的框架,您还可以查看async关键字
答案 2 :(得分:0)
如果您使用的是WPF,则可以使用BeginInvoke。您的代码究竟有什么问题? 这很好用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace AsyncTest
{
class Program
{
static void Main(string[] args)
{
// First Counter (Thread)
Invoke(new ThreadStart(Do));
Thread.Sleep(10000);
// Second Counter (Thread)
Invoke(new ThreadStart(Do));
Console.ReadLine();
}
public static void Do()
{
for (int i = 0; i < 10000000; i++)
{
Console.WriteLine("Test: " + i.ToString());
Thread.Sleep(100);
}
}
public static void Invoke(ThreadStart ThreadStart)
{
Thread cCurrentThread = null;
try
{
cCurrentThread = new Thread(ThreadStart);
cCurrentThread.Start();
}
catch (Exception ex)
{
}
}
}
}