Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    VB.NET blocco durante il beep

    Salve a tutti, sto realizzando un programma in vb.net 2005 dove vengono emessi lunghi beep di circa 10 secondi; però, durante i beep se clicco qualsiasi cosa nel form, va tutto in crash.
    Il codice che ho usato è:
    codice:
    Public Class Form1
    
        Declare Function Beep Lib "kernel32.dll" (ByVal dwFreq As Integer, ByVal dwDuration As Integer) As Boolean
        
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Beep(294, 10000)
        End Sub
    End Class
    C'è un modo per evitare che il programma si blocchi?
    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché parli di "crash"?

    La API restituisce il controllo solo quando termina il suono.
    Se vuoi, eseguila all'interno di un thread apposito o usa altri metodi per generare suoni.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    grazie per la risposta, ma dato che non sono un esperto, mi potresti dire cosa vuol dire eseguire un API in un altro thread e come si fa?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Significa che devi creare un nuovo thread utilizzando le classi dello spazio dei nomi

    http://msdn.microsoft.com/it-it/libr...stem.threading(v=vs.100).aspx

    e in particolare della classe Thread

    http://msdn.microsoft.com/it-it/libr...ng.thread.aspx

    in cui troverai degli esempi (da studiare ed applicare al tuo caso).

    All'interno del thread chiamerai la tua API.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    scusa ma non ci capisco niente da quei link, potresti dirmi il codice?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da DanieleGott
    scusa ma non ci capisco niente da quei link, potresti dirmi il codice?
    Veramente in quei link ci sono degli esempi, come ti ho detto. Usali con un po' di impegno, non si fornisce la "pappa pronta".
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    Ciao un esempio che mi e' stato utile per capire il funzionamento dei thread e' questo, e' molto semplice da capire:
    codice:
    Option Explicit On
    Option Strict On
    Imports System.Threading
    
    ' **********************************************************************************************
    ' * Created In VS2005 *
    ' * Example of multi or worker threading in VB.Net with start & stop of the worker thread *
    ' * With invoking to update progress bar & textbox *
    ' * Create a form with 2x buttons and 1x textbox & 1 x progress bar *
    ' * Modified from the MicroSoft Help So it actually works!! *
    ' **********************************************************************************************
    
    Public Class Form1
    Dim WorkerThread As Thread 'Create the worker thread
    Dim NewVal As Integer 'New Value of progress bar & textbox
    Dim StopThread As Boolean = True 'Boolean Value used to halt the endless loop
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    If StopThread = False Then
    StopThread = True
    Else
    StopThread = False
    WorkerThread = New Thread(AddressOf ThreadTask)
    WorkerThread.IsBackground = True
    WorkerThread.Start()
    End If
    End Sub
    
    Private Sub ThreadTask()
    Dim ProgBarStep As Integer
    Dim RandomNo As New Random()
    Do Until StopThread = True
    ProgBarStep = ProgressBar1.Step * RandomNo.Next(-1, 2)
    NewVal = ProgressBar1.Value + ProgBarStep
    If NewVal > ProgressBar1.Maximum Then
    NewVal = ProgressBar1.Maximum
    ElseIf NewVal < ProgressBar1.Minimum Then
    NewVal = ProgressBar1.Minimum
    End If
    Me.ProgressBar1.Invoke(New MethodInvoker(AddressOf InvokeProgBar1))
    Me.ProgressBar1.Invoke(New MethodInvoker(AddressOf InvokeTextBox1))
    Thread.Sleep(100)
    Loop
    End Sub
    
    Private Sub InvokeProgBar1()
    Me.ProgressBar1.Value = CInt(NewVal)
    End Sub
    
    Private Sub InvokeTextBox1()
    Me.TextBox1.Text = CStr(NewVal)
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    MessageBox.Show("This is the main thread")
    End Sub
    End Class
    Da un grande potere derivano grandi responsabilità

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.