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