在exe中使用多线程面临问题

时间:2011-12-14 09:18:17

标签: multithreading c#-4.0

我在多线程方面遇到问题。 案例:我正在创建exe以从其他网站下载照片,因为有来自其他服务器的1000张照片我已经实现了多线程,但是工作不正常 在Main()中,我调用了一个名为ThreadMain();的方法 在ThreadMain();函数中,我们将任务划分为十个线程,如

 ThreadStart jobOne = new ThreadStart(ThreadOne);
            Thread threadOne = new Thread(jobOne);
            // Start the thread
            threadOne.Start();
ThreadStart jobTwo = new ThreadStart(ThreadTwo);
            Thread threadTwo = new Thread(jobTwo);
            threadTwo.Start();
 ThreadStart jobThree = new ThreadStart(ThreadThree);
            Thread threadThree = new Thread(jobThree);
            threadThree.Start();

等达10个线程
然后我们进一步定义了静态方法,如

static void ThreadOne()         { 数据库任务           }

static void ThreadTwo()         { 数据库任务           }

static void ThreadThree()         { 数据库任务           }

最多10个工作 但是在完成线程后,控制台窗口不会自行关闭或者我无法知道线程是否已完成?请建议

1 个答案:

答案 0 :(得分:1)

使用后台工作人员。

它们是一种在程序中运行的特殊线程。您可以使用后台工作程序的“Progress”属性将进度报告给另一个方法,并在该方法中计算必要的条件并检查线程是否已关闭并最终关闭程序。

如果您不想改变程序的结构,另一种方法是使用另一个名为“watcherThread”的线程(称之为“想要的”),并使该线程以三或五秒的间隔连续运行,具体取决于您的一般执行时间,并检查所有其他线程的isRunning属性或所有其他线程的threadState属性,一旦您知道所有线程已完全运行,您可以使用“environment.exit(0);”<安全地关闭窗口/ p>

一些参考文献

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx http://www.dotnetperls.com/backgroundworker

http://midnightprogrammer.net/post/Using-Background-Worker-in-C.aspx http://csharptuning.blogspot.com/2007/05/background-worker.html