Из потока в поток?

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

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

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Из потока в поток?

Сообщение GPP » 15.10.2008 (Ср) 1:58

Здравствуйте! Есть класс(в данном случае компонент) унаследованный от Component, в нем в отдельном потоке организован прием данных по протоколу UDP. Там же вызывается событие DataArrival. Проблема вот в чем... Как организовать передачу данных из потока в поток. Так как при срабатывании этого события(уже когда компонент на форме) возникает ошибка... Раньше когда я делал данный компонент как UserComponent я использовал метод Invoke и все замечательно работало. Тут же его нет... Как быть? Помогите пожалуйста! Только начинаю разбираться с многопоточностью да и с VB.NET тоже :) Заранее большое спасибо!

PS: Вот код

Код: Выделить всё
Imports System.Net.Sockets
Imports System.Net
Imports System.Text
Imports System.Threading
Imports System.ComponentModel

Public Class UDPMobile
    Inherits Component
    Dim NewThread As New ThreadStart(AddressOf Start)
    Dim ThreadStart As New Thread(NewThread)
    Dim port As Integer

    Public Shared Event DataArrival(ByVal data As String) 'Событие получения данных

    Private Sub Start()
        StartListen()
    End Sub

    Public Sub StartListener(ByVal NumberPort As Integer)
        port = NumberPort
        ThreadStart.Start()
    End Sub

    Private Sub StartListen()
        Dim done As Boolean = False
        Dim listener As New UdpClient(port)
        Dim groupEP As New IPEndPoint(IPAddress.Any, port)
        Try
            While Not done
                Dim bytes As Byte() = listener.Receive(groupEP)

                RaiseEvent DataArrival(Encoding.Default.GetString(bytes, 0, bytes.Length))

            End While
        Catch e As Exception
            MsgBox(e.ToString())
        Finally
            listener.Close()
        End Try
    End Sub


End Class
GPP(c) Gorlo Pavel Programming

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Из потока в поток?

Сообщение Sebas » 15.10.2008 (Ср) 8:26

а тут чем отличается? в событии вызываешь инвок. или у Тебя сам райзеррор ексептится?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Из потока в поток?

Сообщение GPP » 15.10.2008 (Ср) 10:01

Sebas писал(а):а тут чем отличается? в событии вызываешь инвок. или у Тебя сам райзеррор ексептится?

Тут просто теперь нет метода invoke, потому что я унаследовал класс от Component, а там нет Invoke :(

Мне нужно что бы в событии DataArrival я писал вот так и все было тип топ...
Код: Выделить всё
Private Sub UdpMobile1_DataArrival(ByVal data As String) Handles UdpMobile1.DataArrival
        ListBox1.Items.Add(data)
End Sub

А не вылетала ошибка связанная с потоками(типа не из того потока:))
GPP(c) Gorlo Pavel Programming

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Из потока в поток?

Сообщение Sebas » 15.10.2008 (Ср) 15:56

)))))))))))))

Invoke у формы! причём тут твой контрол? Это проблемы формы, соответственно пускай сама их и решает!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Из потока в поток?

Сообщение GPP » 16.10.2008 (Чт) 2:00

Sebas, может как-то можно программно узнать на какой форме находиться компонент... И потом как-то при событиях "внутри" компонента вызывать метод Invoke для формы или для компонента на форме(Listbox к примеру)? Возможно ли такое? И вообще как узнать на какой форме находиться компонент? Спасибо...
GPP(c) Gorlo Pavel Programming

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Из потока в поток?

Сообщение Sebas » 16.10.2008 (Чт) 9:15

Никак! Это неправильно! Компонент не должен знать о форме, это не его сфера ответственности. Формы может и не быть! В противном случае, не делай как компонент, а тупо прикручивай функционал к форме. Всё!
и не бесите меня!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


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

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

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

    TopList