Танцы с бубном вокруг строчки!??

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Leon144
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 92
Зарегистрирован: 13.12.2008 (Сб) 9:57

Танцы с бубном вокруг строчки!??

Сообщение Leon144 » 31.01.2011 (Пн) 8:50

Всем привет и приятного котинга!!
На форме присудствует ListWiew c двумя столбцами и ListBox.

Код: Выделить всё
        For I As Integer = 0 To ListBox1.Items.Count - 1
            Dim FSW As New System.IO.FileSystemWatcher
            With FSW
                .Filter = ListBox1.Items(I)
                .Path = Environment.GetFolderPath(Environment.SpecialFolder.Windows)
            End With
            FSW.EnableRaisingEvents = True
            AddHandler FSW.Created, AddressOf OnCreated
                Next
    End Sub
    Private Shared Sub OnCreated(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs)
           ListView1.Items.add(e.FullPath).subitems.add("Создан файл")   ' ------------ Проблемная строка!!!
              MsgBox("Создан файл: " & e.FullPath, MsgBoxStyle.Information)
    End Sub

Вот суть проблемы:
При возникновении события создания файла появляется сообщение MsgBox но информация в ListView не записывается.
Менял в коде строку Private Shared Sub на Private Sub твориться вообще не понятное. При возникновении события программу просто выкидывает, как только удаляешь строчку ListView1.Items.add.... Все работает нормально. В чем проблема, и что ему не нравиться???
Хотели как лучше, получилось как всегда.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Танцы с бубном вокруг строчки!??

Сообщение FireFenix » 31.01.2011 (Пн) 17:48

Потому что FileSystemWatcher работает в отдельном потоке, а обращаться напрямую к классам другого потока - нельзя, вот и падает.

Код: Выделить всё
Imports System.IO
Imports System.Security.Permissions

Public Class Form1
    Dim Watchers As New List(Of FileSystemWatcher)

    Public Sub New()
        Me.InitializeComponent()

        ListBox1.Items.Add("*.txt")

        Run()
    End Sub

    Public Delegate Sub AddItemDelegate(ByVal e As FileSystemEventArgs)

    Public Sub AddItem(ByVal e As FileSystemEventArgs)
        Dim ListItem As ListViewItem = ListView1.Items.Add(e.FullPath)
        ListItem.SubItems.Add("Создан файл")
    End Sub

    Public Sub Run()
        Dim i As Integer
        Dim Path As String = Environment.GetFolderPath(Environment.SpecialFolder.Windows)

        If Not ListBox1.Items.Count > 0 Then Exit Sub

        For i = 0 To ListBox1.Items.Count - 1
            Dim Watcher As New FileSystemWatcher(Path, ListBox1.Items(i).ToString) With {.EnableRaisingEvents = True}

            AddHandler Watcher.Created, AddressOf OnCreate

            Watchers.Add(Watcher)
        Next
    End Sub

    Private Sub OnCreate(ByVal source As Object, ByVal e As FileSystemEventArgs)
        Dim dlg As New AddItemDelegate(AddressOf AddItem)

        Me.Invoke(dlg, e)
    End Sub
End Class


Примеры как работать с GUI из потока
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Leon144
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 92
Зарегистрирован: 13.12.2008 (Сб) 9:57

Re: Танцы с бубном вокруг строчки!??

Сообщение Leon144 » 31.01.2011 (Пн) 19:17

Спасибо. :lol:
Хотели как лучше, получилось как всегда.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList  
cron