我正在尝试多线程,但我无法弄清楚为什么在调用task.Execute()时,下面的代码块会阻塞UI?使用BeginInvoke在后台线程上执行
public class Task<TRes>
{
private Func<TRes> _func;
public Task(Func<TRes> func)
{
_func = func;
}
public TRes Execute()
{
var iasync = _func.BeginInvoke(null, null);
return _func.EndInvoke(iasync);
}
}
我不想特别解决任何问题。只是想知道为什么即使当前线程(放置到“睡眠”的那个线程是ThreadPool线程(而不是主UI线程))时它阻塞Thread.Sleep。以下是使用Task类的按钮单击事件。
var task = new Task<string>(() =>
{
var start = DateTime.Now;
var isBackGround = Thread.CurrentThread.IsBackground ;
var isThreadPool = Thread.CurrentThread.IsBackground;
Thread.Sleep(5000);
return String.Format("Start {0} : End {1}", start, DateTime.Now);
}
);
this.label1.Text = task.Execute();