Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente bannato L'avatar di Nilox
    Registrato dal
    Jul 2010
    Messaggi
    35

    [VB.NET] Richiamare thread da una classe

    salve a tutti il mio problema è come fare a richiamare da una classe(ClassRead) un thread nella form del mio programma...vi lascio del codice cosi magari capite meglio grazie.

    questa sarebbe ClassRead il thread richiama la function Controllo
    codice:
    Public Sub Operazione()
            Dim th As New Thread(AddressOf Controllo)
            th.IsBackground = True
            th.Start()
        End Sub
    
        Public Function Controllo() As Boolean
            Dim a As Boolean = False
            Dim lungh As Integer = 0
            Try
    ecc. ecc.
    e io devo richiamare il thread qui(nella form1) immagino al posto di x.Controllo
    codice:
    Private Sub ControllaSiti()
            listSiti.Items.Clear()
            Dim apppath As String = My.Application.Info.DirectoryPath
            Dim databasexml As New DataSet
            Dim ok As String = " OK"
            Dim no As String = " Bad Request!"
            Dim urlSito As String = ""
            databasexml.ReadXml(apppath + "\DBSiti.xml")
            For Each i As DataRow In databasexml.Tables(0).Rows
                Dim x As New ClassRead
                urlSito = i("url_sito")
                x.Url = urlSito
                If x.Controllo = True Then
                    listSiti.Items.Add(urlSito + ok)
                Else
                    listSiti.Items.Add(urlSito + no)
                    Dim err As String = x.StatoErr
                    Dim invio As New ClassMail
                    invio.MailReport(urlSito, err)
                End If
            Next
        End Sub
    grazie a tutti in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Così come hai fatto non quaglia ovviamente.
    Ti consiglio di inglobare la tua Sub ovviamente modificata

    codice:
    Private Sub ControllaSiti()
            listSiti.Items.Clear()
            Dim apppath As String = My.Application.Info.DirectoryPath
            Dim databasexml As New DataSet
            Dim ok As String = " OK"
            Dim no As String = " Bad Request!"
            Dim urlSito As String = ""
            databasexml.ReadXml(apppath + "\DBSiti.xml")
            For Each i As DataRow In databasexml.Tables(0).Rows
                Dim x As New ClassRead
                urlSito = i("url_sito")
                x.Url = urlSito
                If x.Controllo = True Then
                    listSiti.Items.Add(urlSito + ok)
                Else
                    listSiti.Items.Add(urlSito + no)
                    Dim err As String = x.StatoErr
                    Dim invio As New ClassMail
                    invio.MailReport(urlSito, err)
                End If
            Next
        End Sub
    nella classe ClassRead, aggiungere un evento alla classe che ti permetta di aggiungere l'elemento se soddisfa le tue condizioni.

    Più o meno i n questo modo:

    codice:
    Imports System.Threading
    
    Public Class ClassRead
        Public Event AddItems(ByVal testo As String)
    
        Private Sub ControllaSiti()
            Dim apppath As String = My.Application.Info.DirectoryPath
            Dim databasexml As New DataSet
            Dim ok As String = " OK"
            Dim no As String = " Bad Request!"
            Dim urlSito As String = ""
            databasexml.ReadXml(apppath + "\DBSiti.xml")
            For Each i As DataRow In databasexml.Tables(0).Rows
                Dim x As New ClassRead
                urlSito = i("url_sito")
                'x.Url = urlSito
                If Controllo() Then
                    RaiseEvent AddItems("...")
                Else
                    RaiseEvent AddItems("...")
                End If
            Next
        End Sub
    
        Public Sub Operazione()
            Dim th As New Thread(AddressOf ControllaSiti)
            th.IsBackground = True
            th.Start()
        End Sub
    
        Public Function Controllo() As Boolean
            Dim a As Boolean = False
            Dim lungh As Integer = 0
            Try
    
            Catch ex As Exception
    
            End Try
        End Function
    
    End Class
    Chiaramente nella tua Form intercetti l'evento e aggiungi l'Item.
    Ricorda che l'evento si scatena in un Thread che non è quello dove gira la tua Form.
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente bannato L'avatar di Nilox
    Registrato dal
    Jul 2010
    Messaggi
    35
    grazie per la risposta ora provvedo a risolvere il mio problema...sarà il caldo che mi stà uccidendo ma oggi non ci sarei mai arrivato alla soluzione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.