Salve a tutti,
innanzitutto complimenti x il forum e x la competenza! consultando le vostre pagine ho risolto molti problemi che opprimevano la mia programmazione xD
detto questo, arrivo al punto! sto cercando di realizzare un programma multi thread senza interfaccia grafica ma ho riscontrato un problema: nn capisco se il programma non funziona causa problemi tra l'esecuzione del 2° thread e l'application.run del 1° thread ke mi serve a visualizzare il menù contestuale
nel 1° thread (main) ho solo il menu contestuale mentre nel secondo c'è un ciclo for che controlla continuamente se l'utente digita una sequenza di numeri (password) confrontando i numeri digitati con quelli memorizzati su una stringa
seguendo passo passo la funzione del 2° thread sembra funzionare, ma una volta eseguito un debug pur digitando la password non accade nulla
ecco il codice che ho reallizato
codice:'ometto dichiarazioni voci menù Public Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Keys) As Integer Dim T As New Threading.Thread(AddressOf get_num) Sub Main() Init() thread_start() nfiIcona.Visible = True Application.Run() End Sub sub init() 'creo il menù ... ... end sub sub thread_start() T.IsBackground = True T.Start() End Sub sub get_num() pwctrl = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\PcLockInfo", "Pw", Nothing) If pwctrl <> "" Then ReDim pos(0 To Len(pwctrl) - 1) For i = 0 To Len(pwctrl) - 1 c += 1 pos(i) = Mid(pwctrl, c, 1) Next i Do For e = 48 To 57 b = 0 b = GetAsyncKeyState(e) ' b = -32767 If m < Len(pwctrl) Then If b = -32767 And Chr(e) = pos(m) Then m += 1 h = h & Chr(e) Else h = "" m = 0 End If End If Threading.Thread.Sleep(100) If h = pwctrl Then Exit For End If Next e Loop Until h = pwctrl MsgBox(h, 16, "") Else nopass() End If end sub

Rispondi quotando