powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
7 сообщений из 7, страница 1 из 1
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752938
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня !

Есть небольшой затык. Асинхронно хочу выгружать картинки на грид. Сейчас делаю это,указав конкретные имена файлов из папки в строке. Как сделать так,чтобы выгружались все картинки из папки с определенным путем ?

Заранее спасибо.

Привожу код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
BackgroundWorker bwLoader = new BackgroundWorker();

     
        public MainWindow()
        {
            InitializeComponent(); //инициализация формы
            final = new main_control();//создания экземпляра класса управления

            Init();
          
        }

        void Init()
        {
            bwLoader.WorkerReportsProgress = true;
            bwLoader.DoWork += bwLoader_DoWork;
            bwLoader.ProgressChanged += bwLoader_ProgressChanged;

            bwLoader.RunWorkerAsync();    
        }

        void bwLoader_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (e.UserState is BitmapImage)
            {
                BitmapImage image = e.UserState as BitmapImage;
                mainGrid.Children.Add(new Image() { Source = image, SnapsToDevicePixels = true });
            }
        }


        void bwLoader_DoWork(object sender, DoWorkEventArgs e)
        {
            string[] pathList = e.Argument as string[];
            foreach (var item in pathList)
            
            {
                Thread.Sleep(5000);

                BitmapImage src = new BitmapImage();
                src.BeginInit();
                src.UriSource = new Uri(item, UriKind.Relative);
                src.CacheOption = BitmapCacheOption.OnLoad;

                src.EndInit();
                src.Freeze();
                bwLoader.ReportProgress(0, src);
            }
        }
...
Рейтинг: 0 / 0
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752957
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuzz, передай методу RunWorkerAsync массив имен полученный с помощью Directory.GetFiles() .

P.S. Ты похоже привел не весь код т.к. методу RunWorkerAsync не передаетсяа аргумент, но тем не менее ты читаешь e.Argument внутри bwLoader_DoWork
...
Рейтинг: 0 / 0
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752964
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile,спасибо большое.

на самом деле,в коде вот так было:
Код: c#
1.
 bwLoader.RunWorkerAsync(new string[] { "2.jpg"});



А вы не могли бы объяснить куда прикрутить Directory.GetFiles(). ?
...
Рейтинг: 0 / 0
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752965
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuzz,

Код: c#
1.
2.
string[] pictures =  Directory.GetFiles(@"c:\folder", "*.jpg");
bwLoader.RunWorkerAsync(pictures);


или
Код: c#
1.
bwLoader.RunWorkerAsync(Directory.GetFiles(@"c:\folder", "*.jpg"));
...
Рейтинг: 0 / 0
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752966
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 void Init()
        {
            
            bwLoader.WorkerReportsProgress = true;
            bwLoader.DoWork += bwLoader_DoWork;
            bwLoader.ProgressChanged += bwLoader_ProgressChanged;
            string[] dirs = Directory.GetFiles(@"C:\tmp\linii_graph\linii_graph\bin\Debug");
            bwLoader.RunWorkerAsync(dirs);    
        }

        void bwLoader_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (e.UserState is BitmapImage)
            {
                BitmapImage image = e.UserState as BitmapImage;
                mainGrid.Children.Add(new Image() { Source = image, SnapsToDevicePixels = true });
            }
        }


        void bwLoader_DoWork(object sender, DoWorkEventArgs e)
        {
            string[] dirs = Directory.GetFiles(@"C:\tmp\linii_graph\linii_graph\bin\Debug");
            foreach (var dir in dirs)
            
            {
                Thread.Sleep(2000);

                BitmapImage src = new BitmapImage();
                src.BeginInit();
                src.UriSource = new Uri(dir, UriKind.Relative);
                src.CacheOption = BitmapCacheOption.OnLoad;

                src.EndInit();
                src.Freeze();
                bwLoader.ReportProgress(0, src);
            }
        }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 string[] dirs = Directory.GetFiles(@"C:\tmp\");
  bwLoader.RunWorkerAsync(dirs);    



  void bwLoader_DoWork(object sender, DoWorkEventArgs e)
        {
            string[] dirs = Directory.GetFiles(@"C:\tmp\");
            foreach (var dir in dirs)

 



Я использовал такую связку. Правильно ли это ?
...
Рейтинг: 0 / 0
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752967
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuzzЯ использовал такую связку. Правильно ли это ?
Не совсем. Ты два раза получаешь список файлов. Лучше так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
string[] dirs = Directory.GetFiles(@"C:\tmp\");
bwLoader.RunWorkerAsync(dirs);

void bwLoader_DoWork(object sender, DoWorkEventArgs e)
{
    string[] dirs = (string[])e.Argument;
    foreach (var dir in dirs)
...
Рейтинг: 0 / 0
BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
    #38752968
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile,
СУПЕР! Спасибо Вам огромное !!!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / BackgroundWorker асинхронный поток.Как вместо строки сделать путь ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]