Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49

    [VB .NET] Aprire un form in modalità showdialog

    Ciao,
    l'applicazione che ho creato acquisisce dati continuativamente da un dispositivo tramite porta seriale. La ricezione dei diversi byte viene captata dell'evento DataReceived.

    In caso di ricezione di valori non accettabili, all'utente viene presentato un messaggio di errore (msgerr) rappresentato da un form con una label (in cui viene specificato il tipo di errore) e un OK_button (che chiude la finestra).

    Aprendo msgerr tramite comando msgerr.showdialog() inserito nell stesso thread nel quale viene gestita la comunicazione tra pc e dispositivo, questa si arresta fino a quando msgerr non viene chiusa tramite click su OK_button che esegue il comando me.close().

    Per far si che la comunicazione non venga interrotta nel momento in cui viene presentato il messaggio di errore, mi servo di un timer che, inizializzato tramite comando "Invoke(New timerDelegate(AddressOf timer1_start))", dopo 1ms (tempo minimo impostabile) apre msgerr eseguendo il comando msgerr.showdialog().

    In questo modo l'acquisizione non si interrompe e il messaggio di errore è aperto in modalità showdialog() non permettendo quindi di interagire con il form sottostante, quello principale e quello nel quale vengono presentati i dati ricevuti.

    Ok... tutto funziona bene.
    Quello che vorrei sapere è se sia possibile ottenere un risultato equivalente senza tuttavia utilizzare il timer e, quindi, senza dover attendere 1ms prima dell'apertura di msgerr.

    Grazie

  2. #2
    Che oggetto usi per acquisire dati da porta seriale?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49
    I dati ricevuti li memorizzo in un array monodimensionale e, dopo averli algebricamente elaborati, li presento in differenti textbox posizionati nel form principale.

    La porta la inizializzo con i seguenti comandi:
    codice:
            With SerialPort1
                .PortName = ("COM" & settings_lines(0))
                .BaudRate = 9600
                .DataBits = 8
                .StopBits = 1
                .Parity = Parity.None
                .Handshake = Handshake.None
                .ReceivedBytesThreshold = 1
                .ReadBufferSize = 8
                .WriteBufferSize = 8
                .Encoding = System.Text.Encoding.Default
            End With

  4. #4
    Richiama ShowDialog da un altro thread.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49
    Mumble..mumble..
    ..qualche suggerimento su come fare praticamente?!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    49
    Risolto inserendo le seguenti linee di comando (in rosso):

    codice:
    Public Class Main
    ...
       Private Sub Main_Load(...)
       ...
          Dim form_thread As New Thread(AddressOf form_showdialog)
          form_thread.Start()
       ...
       End Sub 
    
       Private Sub form_showdialog(...)
          msgerr.showdialog()
       End Sub
    ...
    End Class
    Grazie per il consiglio!

  7. #7
    Di niente, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

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.