-5

私はいくつかの操作をしています(私はWPFで作業しています)。私はそれらを別のスレッドで実行するつもりはありません。どうすればいいですか?

例:

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

2 に答える 2

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; }
        }
    }
于 2012-11-09T20:05:22.703 に答える
1

WPF を使用していて、マルチスレッド化する必要がある場合は、UI をビジネス ロジックから分離することから始める必要があります。そうしないと、エンドレス チェーンのDispatcher.Invoke()呼び出しになってしまいます。

別の回答でも述べられているように、マルチスレッド アプリケーションの開発を容易にするために Task Parallel Library を参照してください。

于 2012-11-09T20:12:11.077 に答える