IRagnarok
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Мне недавно выслали задание написать архиватор. Один из пунктов задания был: "Программа должна работать эффективно в многопроцессорной среде и уметь обрабатывать файлы, размер которых превышает объем доступной оперативной памяти." я написал программу архивации и применил код для создание фонового потока и запускал его(этот метод архивирует файл) Thread t = new Thread(delegate(){Compress(args[1], newFileName);}); t.Start(); мне написали: "Задача не решена. Формально не выполнено требование об эффективной работе в многопоточной среде. Подсказка: современные процессоры состоят из нескольких ядер, и могут одновременно и параллельно выполнять несколько задач." лазил по простором наткнулся на backgroundWorker. при том что запускаю его и он работает вроде как : private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Compress(Переменные.путь, Переменные.имя); } public static void Compress(string filename, string name) { FileStream originalFileStream = File.OpenRead(filename); FileStream compressedFileStream = File.Create(name + ".zip"); GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress); try { int value = originalFileStream.ReadByte(); while (value != -1) { compressionStream.WriteByte((byte)value); value = originalFileStream.ReadByte(); } } finally { compressionStream.Dispose(); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { System.Console.WriteLine(0); } else { System.Console.WriteLine(1); } this.Close(); } Но как только он начинает писать в файл в методе Compress, то сам завершается, при этом он не выдаёт ни сообшение о том что он закончил ни об ошибке. просто перестаёт работать и программа закрывается. что за прикол? может мне кто то посоветует по другому сделать многопоточное программирование?. Заранее спасибо если кому то будет интересно вникнуть в эту хрень))))В тем более мне надо сделать в консольном приложении, так как потом по окончании мне надо послать сообщение в командную строку, чего никак не получается у меня из формового приложения |