Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Теория.Создание формы.Потоки (C#) (http://forum.oszone.net/showthread.php?t=200789)

LilLoco 01-03-2011 09:54 1624270

Теория.Создание формы.Потоки (C#)
 
Здравствуйте, Уважаемые!Помогите, пожалуйста, разобраться в теории и практике! Суть работы такова : Запускается программа, сворачивается, висит в трее!При запуске запускается несколько потоков, один из которых проверяет появление новых файлов(размеры могут колебаться от 1кб до нескольких гб).Количество файлов тоже неизвестно!Для наглядности копирования файлов, есть форма с отображением хода выполнения копирования.
Конструктор :

Код:

CopyFilesWithProgress frm = new CopyFilesWithProgress(List<string[]> list)
list передается с указаниями путей откуда и куда копировать!

В потоке формируется этот лист!И если
Код:

list.Count > 0
нужно запустить копирование,т.е. нужно запустить форму и передать этот лист!При создании формы в потоке, как только она создастся поток продолжает свою работу, но нужно чтобы он ожидал, т.к. в потоке используется зацикливание, и по окончании одной итерации происходит "засыпание" потока, на определенное время, и в это время форма не блокируется!

Была мысль передать через поля класса главного окна лист, но как вызвать из него событие запуска копирования?
помогите разобраться, натолкните на мысль!
Заранее Всех благодарю!

Beyound 01-03-2011 18:12 1624664

эм... я чето слабо понял что ты там накрутил но смотри. Поток это тоже самое что ты запускаешь паралельно вторую программу, которая просто тесно связаны. Когда же ты создаешь форму это создает ..эм.. скажем еще один поток специально под форму и она живет "своей" жизнью.
другое дело я немогу понять нах тебе потоки если у тебя будет 2-а окна которые итак работают параллельно. И вообще я не вижу в твоих словах распараллеливание процесса для чего и придуманы потоки. Как ты себе представляешь копирование списка, который заполняется "налету". А если в списке чтото появилось - почему нельзя копировать сразу по чьейнить команде ибо ты всеравно это делаешь в другой форме которая тока грузит процесс, но никак не встревает в циклы основной формы

LilLoco 01-03-2011 22:19 1624858

Цитата:

Цитата Beyound
другое дело я немогу понять нах тебе потоки если у тебя будет 2-а окна которые итак работают параллельно. »

2 окно должно создаваться из потока, если нужно скопировать какие то файлы!
Потоки же создаются все из одно "главной" формы!А уже в них может понадобится вызов форм!

Цитата:

Цитата Beyound
Как ты себе представляешь копирование списка, который заполняется "налету" »

Не очень Вас понял, что вы имеете ввиду!
Файлы копируются после создания списка!

Delirium 02-03-2011 00:59 1624971

LilLoco, приведи ка скриншот своей программы и окон, может, понятней станет, что к чему. Я по описанию тоже ничего не понял :)

LilLoco 02-03-2011 08:44 1625088

Вложений: 2
Так, в данный момент почти все в теории, скринов особо то не нужно!
На данный момент есть : Главная форма(main), на форме есть только listBox для "логирования" ошибок и всякого другого(для слежения за работой).
При запуске приложения форма сворачивается в трей и запускаются другие потоки, в одном из которых появляется список файлов для копирования.
(рис1)

Планируется сделать что то типа вот этого :
(рис2)

То есть в окне будет выполнятся какая то работа.Поэтому поиск файлов и копирование вынесено в отдельный поток(th1)(поток засыпает на некоторое время, и если это делать в "потоке" главной формы, она тоже "засыпает", что недопустимо). В потоке th1 идет поиск, заполняет List<string[]>.Далее нужно выполнить копирование файлов!Некоторые файлы, которые будут копироваться, могут использоваться в форме main, на мой взгляд, нужно на время копирования сделать неактивными эти вкладки! Но с другими вкладками можно продолжать работать!На время копирования нужно сделать что то визуально - отображающее процесс!Вот и надумал сделать форму с прогрессбарами. Но не надумал как вызвать форму из потока th1.

P.S. Простите за "непонятные" объяснения. Не знаю как проще (

Можно ли вообще из другого потока, запустить форму так, что если засыпает поток, форма(запущенная из потока) продолжает "нормальную" работу?


Время: 06:49.

Время: 06:49.
© OSzone.net 2001-