【问题标题】:facing issue using Multithreading in exe在 exe 中使用多线程面临问题
【发布时间】:2011-12-14 09:18:17
【问题描述】:

我在多线程中遇到问题。 案例:我正在创建 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 个线程
然后我们进一步定义了像

这样的静态方法

静态 void ThreadOne() { 数据库任务 }

静态 void ThreadTwo() { 数据库任务 }

静态 void ThreadThree() { 数据库任务 }

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

【问题讨论】:

  • 你是在使用join来等待线程完成吗?

标签: multithreading c#-4.0


【解决方案1】:

使用后台工作人员。

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

如果您不想改变程序的结构,另一种方法是使用另一个名为“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多