Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3

    [vb.net] eventi impazziti?

    dove sbaglio?
    sto impazzendo, cercando di fare questa routine in vb.net
    io ricevo un evento da una dll (richiamata con handles mc1.arrivato)
    a questo punto, in base al valore di "codice" dovrei fare alcune operazioni, ma
    non riesco a capire cosa succeda...

    se metto nella routine mc1_Arrivato direttamente
    myTimer.Enabled = True
    myTimer.Interval = 1000
    myTimer.Start()
    il timer non parte

    allora ho provato a genereare un evento partenzatimer
    ma il msgbox "3" appare solo se la riga "msgbox 1" è abilitata...
    se la rendo un commento anche msgbox3 scompare!
    Avete idea del motivo di questo comportamento??

    Grazie
    Ciao
    Stefano



    Private Shared WithEvents mc1 As New UClass_
    Private Shared myTimer As New System.Windows.Forms.Timer()
    Private Shared Event partenzatimer(ByVal codice As String)

    Public Sub form__Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    AddHandler myTimer.Tick, AddressOf TimerEventProcessor
    End Sub

    Private Shared Sub mc1_Arrivato(ByVal codice As String) Handles mc1.Arrivato
    MsgBox("1")
    RaiseEvent partenzatimer(codice)
    End Sub

    Public Shared Sub EventoPartenzatimer(ByVal codice As String) Handles Me.partenzatimer
    'MsgBox("2")
    myTimer.Enabled = True
    myTimer.Interval = 1000
    myTimer.Start()

    End Sub


    Private Shared Sub TimerEventProcessor(ByVal myObject As Object, ByVal myEventArgs As EventArgs)
    MsgBox("3")
    myTimer.Stop()
    End Sub

  2. #2
    secondo me l'errore che sta a monte è che il load parte dopo mc1 arrivato,
    dunque se parte prima mc1arrivato, succede che non è neancora stata eseguita l'istruzione

    AddHandler myTimer.Tick, AddressOf TimerEventProcessor

    in questo caso, non avendo eseguito questa istruzione, TimerEventProcessor non può essere eseguita e dunque, msgBox 3 non viene eseguito.

    Ma se invece metti il MsgBox 1, allora blocchi mc1 arrivato e dunque permetti il caricamento della form e di conseguenza

    AddHandler myTimer.Tick, AddressOf TimerEventProcessor

    dunque permetti anche l'arrivo alla routine TimerEventProcessor, in tal modo hai il risultato voluto

    però il problema va risolto inserendo la famosa

    AddHandler myTimer.Tick, AddressOf TimerEventProcessor

    nel primo evento della form, che non dovrebbe essere Load, ma non ricordo il nome dato che ho usato troppo poco vb.net!

    prova e poi dimmi
    Programmazione .NET
    http://www.samueletosatto.tk

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3
    Originariamente inviato da tossam
    secondo me l'errore che sta a monte è che il load parte dopo mc1 arrivato,
    Grazie tossam.
    Ho provato ma il form si carica prima e cosi' anche la riga incriminata
    l'ho provato anche ad aggiungere alla routine new(), ma non cambia nulla.

    Adesso un mio amico (programmatore in delphi!) mi ha detto di provare con la funzione
    delegate
    (introdotta nel .net, dice lui)
    adesso me la studio e ci provo.

    In ogni caso, grazie per la risposta.
    Ciao
    Stefano

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3
    direi che il problema si risolve con le delegate,
    visto che si tratta di thread diversi.

    Non proprio intuitivo, ma sembra funzionare.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.