Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 |

 

  Вопрос: Background worker? И вопрос: Доступ к файлу запрещ Добавлено: 18.05.09 23:38  

Автор вопроса:  van-lamer
Привет всем!
Для чего нужен Background worker, и как с ним работать?
Если можно небольшой примерчик?

И еще вопросик:
Например идет перебор и добавление файлов в листбокс
для обработки ошибок используется try cath
доходит до определенного файла к которому нет доступа выдает сообщение что доступ к файлу или папке запрещен и все перебор останавливается.
Вопрос как правильно обработать такую ситуацию, выдать соответствующее сообщение и перейти к следующему файлу не прерывая работы?

Ответить

  Ответы Всего ответов: 33  

Номер ответа: 1
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #1
Добавлено: 19.05.09 01:10
код в студию!

Ответить

Номер ответа: 2
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #2
Добавлено: 19.05.09 08:22
1.
Background Worker - это обертка потока. Поток - это подпрограмма, которая работает параллельно с основным кодом, и работает она абсолютно ассинхронно. Возможно и на другом ядре, если у тебя многоядерный проц. Суть проста: в событии воркера DoWork пишешь код, потом вызывваешь у воркера метод RunWorkerAsync и код, написанный в DoWork запускается. Разница между обычной процедурой и запуском потока состоит в том, что после вызова подпрограммы твой код идет дальше, и не дожидается окончания выполения того, что написано в DoWork у воркера. Оно работает само посебе независимо от проги. Ты можешь обращаться к общим переменным из другого потока, но работу с интерфейсом можешь осуществлять только из главного потока, в котором у тебя висит окно.
Я думаю, с этим тебе пока связываться не стоит, ибо многопоточность - штука серьезная, требующая глубокого понимания.

2. Тупо и просто: обработчик ошибок суешь в отдельную процедуру, и вызываешь ее для всех файлов. Если происходит ошибка, код прерывается только на уровне процедуры, а цикл переходит к следующему файлу.

Ответить

Номер ответа: 3
Автор ответа:
 van-lamer



Вопросов: 28
Ответов: 25
 Профиль | | #3 Добавлено: 19.05.09 13:07
2 VβÐ Uηit
Спасибо. С обработчиком не въехал извини.
2 Дмитрий
код в студию!

Вот такой код, не идеальный но пока умею только так.
  1.   
  2.  Sub AddFiles()
  3.         Dim dirName As String
  4.         If Directory.Exists(dirName) Then
  5.             Dim dirinfo As New DirectoryInfo(dirName)
  6.             Dim item1 As New ListViewItem()
  7.             lvInTo.Items.Clear()
  8.             Try
  9.            Dim files() As FileSystemInfo = dirinfo.GetFiles("*.*", SearchOption.AllDirectories)
  10.                 For i As Integer = 0 To files.Length - 1
  11.                     With lvInTo.Items.Add(files(i).Name, 0)
  12.                         .SubItems.Add(files(i).Extension)
  13.                         .SubItems.Add(FileLen(files(i).FullName))
  14.                         .SubItems.Add(files(i).CreationTime)
  15.                         .SubItems.Add(files(i).FullName)
  16.                     End With
  17.                 Next i
  18.             Catch ex As Exception
  19.               'ошибка: Отказано в доступе по пути "e:\System Volume Information".
  20.               'что тут делать????
  21.             End Try
  22.         End If
  23.     End Sub

Ответить

Номер ответа: 4
Автор ответа:
 Дмитрий



Вопросов: 0
Ответов: 11
 Профиль | | #4 Добавлено: 19.05.09 16:48
Попробуй:
  1. Sub AddFiles()
  2. lvInTo.Items.Clear()
  3.         Dim subdir As String
  4.         Dim dirName As String = "D:\"
  5.         If System.IO.Directory.Exists(dirName) Then
  6.             Dim dirinfo As New System.IO.DirectoryInfo(dirName)
  7.             Try
  8.                 Dim dirs() As System.IO.FileSystemInfo = dirinfo.GetDirectories("*", IO.SearchOption.TopDirectoryOnly)
  9.                 Me.Text = dirs.Length
  10.                 For j As Integer = 0 To dirs.Length - 1
  11.                     subdir = dirs(j).FullName
  12.                     MsgBox(subdir)' тут мы последовательно увидим все папки верхнего уровня (в т.ч. СистемВолюм... и Рециклер)
  13.                     Dim fileinfo As New System.IO.DirectoryInfo(subdir)
  14.                     Try
  15.                         Dim files() As System.IO.FileSystemInfo = fileinfo.GetFiles("*.*", System.IO.SearchOption.AllDirectories)
  16.                         For i As Integer = 0 To files.Length - 1
  17.  
  18.                             With lvInTo.Items.Add(files(i).Name, 0)
  19.                                 .SubItems.Add(files(i).Extension)
  20.                                 .SubItems.Add(FileLen(files(i).FullName))
  21.                                 .SubItems.Add(files(i).CreationTime)
  22.                                 .SubItems.Add(files(i).FullName)
  23.                             End With
  24.  
  25.                         Next i
  26.                     Catch ex As Exception
  27.                         MsgBox(ex.Message)
  28.                     End Try
  29.                 Next
  30.             Catch ex As Exception
  31.             End Try
  32.             'а тут мы ловим файлы, лежащие непосредственно в папке dirName
  33.             Dim fileinfo1 As New System.IO.DirectoryInfo(dirName)
  34.             Try
  35.                 Dim files() As System.IO.FileSystemInfo = fileinfo1.GetFiles("*.*", System.IO.SearchOption.TopDirectoryOnly)
  36.                 For i As Integer = 0 To files.Length - 1
  37.                     With lvInTo.Items.Add(files(i).Name, 0)
  38.                         .SubItems.Add(files(i).Extension)
  39.                         .SubItems.Add(FileLen(files(i).FullName))
  40.                         .SubItems.Add(files(i).CreationTime)
  41.                         .SubItems.Add(files(i).FullName)
  42.                     End With
  43.                 Next i
  44.             Catch ex As Exception
  45.             End Try
  46.  
  47.         End If
  48.         Me.Text = Me.Text & "/" & Me.lvInTo.Items.Count
  49.     End Sub

Таким образом, сначала создаем список папок, непосредственно входящих в данную, а затем их по очереди просматриваем и заносим в ЛистВью.
Недостаток: может считать весьма долго. Ну и до оптимизации кода далеко. Однако же все что надо, она мне предоставила.
Примечание: Me.Text... - встречается 2 раза . Это тестовое: показывает кол-во папок верхнего уровня/кол-во файлов в ЛистВью. Сошлось с системой, если убрать в настройке вида папки (в Винде) скрытие системных файлов (винда на это злодеяние ругается :) )

Ответить

Номер ответа: 5
Автор ответа:
 Дмитрий



Вопросов: 0
Ответов: 11
 Профиль | | #5 Добавлено: 19.05.09 16:49
Ой!
  1. Dim dirName As String = "D:\"
- это я жестко задавал пространство поиска. В ребочей версии прибери это: = ";D:\"

Ответить

Номер ответа: 6
Автор ответа:
 Дмитрий



Вопросов: 0
Ответов: 11
 Профиль | | #6 Добавлено: 19.05.09 16:52
Сцуко! Б---ские смайлы. Убери = и все за ним в этой строке.

Ответить

Номер ответа: 7
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #7
Добавлено: 19.05.09 17:16
Ээ... кажецо ща надо будет считать Дмитриев...

Ответить

Номер ответа: 8
Автор ответа:
 Дмитрий



Вопросов: 0
Ответов: 11
 Профиль | | #8 Добавлено: 19.05.09 17:22
VβРUηit пишет:
Ээ... кажецо ща надо будет считать Дмитриев...

Не, вопрос задал один, а отвечал другой :)

Ответить

Номер ответа: 9
Автор ответа:
 van-lamer



Вопросов: 28
Ответов: 25
 Профиль | | #9 Добавлено: 19.05.09 18:11
2 Дмитрий
Спасибо за код буду пробовать.

2 VβÐ Uηit
Ээ... кажецо ща надо будет считать Дмитриев...


;-)))))))

Ответить

Номер ответа: 10
Автор ответа:
 Дмитрий



Вопросов: 0
Ответов: 11
 Профиль | | #10 Добавлено: 19.05.09 19:34
Автор ответов 1,4,5,6,8 один и тот же - я :)
Просто немножко нахалтурил с учетками на форуме: на одном компе заходил под одной, а на другом - под другой. Исправлюсь.
И по поводу списка файлов: зачем это вообще надо? какой смысл в получении списка (не структурированного) ВСЕХ файлов на диске?! Я при тестировании указал искать в системном диске - растянулось минут на 5 удовольствие (там всего около 55000 файлов). Ну и список получил соответствующий - практически бесполезный для юзера...
Дмитрий (автор вопроса), зачем ЭТО ?

Ответить

Номер ответа: 11
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #11
Добавлено: 19.05.09 20:57
астянулось минут на 5 удовольствие (там всего около 55000 файлов)

Везет... У меня на компе по последней Dr.Web'овской проверке их 14 миллионов... :)

Ответить

Номер ответа: 12
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #12
Добавлено: 19.05.09 22:30
Сикоки-сикоки?! На одном только логическом диске с системой и установленными прогами?! Доктор явно врет!
А все ж вопрос остался: зачем пользователю список файлов со всего диска?!

Ответить

Номер ответа: 13
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #13
Добавлено: 20.05.09 08:37
У меня три жестких диска - на каждом из них по одному логическому.

Ответить

Номер ответа: 14
Автор ответа:
 Дмитрий



Вопросов: 0
Ответов: 11
 Профиль | | #14 Добавлено: 20.05.09 08:47
Мдя...
Вот и заостряется вопрос о целесообразности получения этого списка.
Может, автор вопроса расскажет подробнее, зачем ему надо это? Авось чего интереснее и производительнее придумаем...
Вот только где же он?

Ответить

Номер ответа: 15
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #15
Добавлено: 20.05.09 11:34
Автор вопроса: Дмитрий
Дмитрий №1 пишет:
А все ж вопрос остался: зачем пользователю список файлов со всего диска?!

Следовательно автор не этот Дмитрий, т.к. он бы знал зачем ему весь список!
Дмитрий №2 пишет:
Может, автор вопроса расскажет подробнее, зачем ему надо это? Авось чего интереснее и производительнее придумаем...
Вот только где же он?

Этот Дмитрий тоже не автор...
Лично я уже сбился кто есть кто Оо!

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам