使用WPF中的线程类创建异步线程
本文关键字:线程 异步 创建 WPF 使用 | 更新日期: 2023-09-27 18:26:38
我正在使用创建线程
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线程应该启动)。我该怎么办?
如果您使用的是.net 4.5,则可以执行
Task.Run( () =>
{
// your code here
});
在.net 4.0中,你可以做:
Task.Factory.StartNew(() =>
{
// your code here
},
CancellationToken.None,
TaskCreationOptions.DenyChildAttach,
TaskScheduler.Default);
如果只使用线程前响应UI,请查看System.ComponentModel.BackgroundWorker
这通常用于响应式UI
如果你使用最新版本的框架,你也可以查看async关键字
异步/等待与BackgroundWorker
如果您正在使用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)
{
}
}
}
}