сталкивается проблема с использованием многопоточности в exe - PullRequest
0 голосов
/ 14 декабря 2011

У меня проблема с многопоточностью.Кейс: я создаю exe для загрузки фотографий с какого-то другого сайта, так как есть тысячи фотографий, пришедших с другого сервера, я реализовал многопоточность, но это не работает должным образомВ 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 Ответ

1 голос
/ 14 декабря 2011

использовать фоновые рабочие.

Это особый вид потока, который запускается в вашей программе. Вы можете использовать свойство «Progress» фонового рабочего, чтобы сообщить о ходе выполнения другому методу, а в методе вычислить необходимые критерии и проверить, закрыты ли потоки, и, наконец, закрыть программу.

Если вы не хотите изменять структуру программы, другим методом будет иметь другой поток с именем «watcherThread» (назовите его wat ever u want) и заставить этот поток работать непрерывно с интервалами в три или пять секунд на основе ваше общее время выполнения и пусть оно проверяет свойство isRunning всех других потоков или свойство threadState всех других потоков, и как только вы узнаете, что все потоки полностью запущены, вы можете безопасно закрыть свои окна, используя "environment.exit (0);"

Некоторые ссылки

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...