Oppure

Loading
11/06/12 16:40
piter123
ho relizzato un progetto che si collega ad un server, scarica dei dati, gli elabora e li visualizza tramite componente esterno di grafico ecgraph, per la connessione ho usato sempre il componente com di vb6 winsock. funziona tutto correttamente forchè per il fatto che una grande quantità di antivirus rileva il winsock come uno spyware.
Ho quindi eliminato il com winsock e utilizzato direttamente la classe di net Imports System.Net.Sockets.
Ora il progetto funziona correttamente per quel che riguarda il sock ma mi và in crash nel momento in cui inizializza la form principale dove è inserito il controllo com ecgraph, infatti togliendo tale ocx esterno il progetto parte regolarmente. Si è creato una specie di conflitto tra l'ocx esterno la classe sock di net. Sicuramente sbaglio io in qualcosa, mi date suggeriementi grazie

l'errore che compare è il seguente :
Ultima modifica effettuata da piter123 11/06/12 16:43
aaa
11/06/12 20:05
HeDo
basta aggiungere l'attributo STAThread al main dell'applicazione
aaa
12/06/12 7:29
piter123
eheh, hai detto niente per uno come me. Ho provato a leggere un pò in giro ma invece di semplificare mi sono ancora di più incasinato.
Dunque il problema nasce dalla seguente riga :

Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf getMessage)
ctThread.Start()


che da quello che capisco reinderizza la risposta del server alla routine getmessage, la quale poi gestisce la stringa di riposta dal server,
e per farlo cambia in qualche modo il threading che poi fà andare in conflitto l'oggetto COM.

Tu mi dici di aggiungere l'attributo STAThread al main dell'applicazione, posso chiederti gentilmente un esempio ?

Grazie

aaa
12/06/12 7:43
HeDo

se usi un thread aggiuntivo devi crearlo in questo modo:

Dim t = New Thread(MyThreadStartMethod)
t.SetApartmentState(ApartmentState.STA)
t.Start()
aaa
12/06/12 8:14
piter123
mi viene fuori questo ma continua ad andarmi in crash

Imports System.Threading

Public Class F_Base

Private Property ecGraphOcx As Threading.ThreadStart

Private Sub F_Base_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim t = New Threading.Thread(ecGraphOcx)
t.SetApartmentState(ApartmentState.STA)
t.Start()

End Sub

End Class
aaa
12/06/12 8:55
piter123
.
Ultima modifica effettuata da piter123 13/06/12 7:46
aaa