WPF操作中的线程

时间:2012-11-09 20:02:10

标签: c# wpf multithreading

我有一些操作(我使用WPF)。我不会在一个单独的线程中运行它们。 我该怎么办?

示例:

foreach (string d in Directory.GetDirectories(sDir)) 
{
    foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
    {
        lstFilesFound.Items.Add(f);
    }
    DirSearch(d);
}

2 个答案:

答案 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)。