我有一些操作(我使用WPF)。我不会在一个单独的线程中运行它们。 我该怎么办?
示例:
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d, txtFile.Text))
{
lstFilesFound.Items.Add(f);
}
DirSearch(d);
}
答案 0 :(得分:2)
如果您使用的是.NET 4,则可以使用Task Parallel Library
只是C#.NET 4控制台应用程序中的一个示例:
internal class Program
{
private static readonly object listLockObject = new object();
private static readonly IList<string> lstFilesFound = new List<string>();
private static readonly TxtFile txtFile = new TxtFile("Some search pattern");
private static string sDir = "Something";
public static void Main()
{
Parallel.ForEach(Directory.GetDirectories(sDir), GetMatchingFolderAndDoSomething);
}
private static void GetMatchingFolderAndDoSomething(string directory)
{
//This too can be parallelized.
foreach (string f in Directory.GetFiles(directory, txtFile.Text))
{
lock (listLockObject)
{
lstFilesFound.Add(f);
}
}
DirSearch(directory);
}
//Make this thread safe.
private static void DirSearch(string s)
{
}
public class TxtFile
{
public TxtFile(string text)
{
Text = text;
}
public string Text { get; private set; }
}
}
答案 1 :(得分:1)
如果你正在使用WPF并且需要多线程,那么你必须从Separating the UI from the business logic开始,否则你将会有一连串的Dispatcher.Invoke()
来电。
正如另一个答案所述,请参阅任务并行库以简化多线程应用程序的开发,但请注意,WPF UIElements的属性只能由创建它们的线程访问(通常称为Dispatcher Thread)。