2010-02-16 11 views
6

Ho appena iniziato a sperimentare con Thread e mi sono imbattuto in un problema che non sono in grado di risolvere da solo. Ottengo l'errore: Errore 1 'bool projekt.ftp.UploadFil (oggetto)' ha il tipo di ritorno sbagliato. NET ParameterizedThreadStart tipo di ritorno errato

Io uso questo codice per avviare un thread utilizzando il metodo ftp.Uploadfile:

Thread ftpUploadFile = new Thread(new ParameterizedThreadStart(ftp.UploadFile)); 
ftpUploadFile.Start(e.FullPath); 

E questo è il metodo che ho usato.

public static bool UploadFile(object filename) 
{ 
    string file = Convert.ToString(filename); 

    /* blah blah fricken blah snip */ 

    return false; 

} 
+0

Sei sicuro che il vostro 'oggetto lok' è thread-safe? – SLaks

risposta

6

Se si legge il messaggio di errore, si vedrà che il problema è che il metodo ha il tipo restituito errato.

In particolare, il metodo UploadFile restituisce bool, ma il delegato ParameterizedThreadStart restituisce void.

Per risolvere questo problema, modificare il metodo UploadFile per restituire void e modificare tutte le sue istruzioni return xxx; in return;.

In alternativa, si potrebbe avvolgere UploadFile in un metodo anonimo, in questo modo:

Thread ftpUploadFile = new Thread(delegate { ftp.UploadFile(e.FullPath); }); 
ftpUploadFile.Start(); 
+0

Grazie mille per l'aiuto! :) E grazie a tutti per una rapida risposta! – warbio

0

provare

public static void UploadFile(object filename) 
0

Penso che ParameterizedThreadStart si aspetti un metodo con un tipo di ritorno void.

1

Utilizzare un delegato anynomous in questo modo:

bool result = false;  
ThreadStart s = delegate 
{ 
    result = UploadFile(ftp.UploadFile); 
}; 
Thread t = new Thread(s); 
s.Start(); 
s.Join(); 
// now you have your result  
if (result) 
{ // do something useful 
} 
+0

In runtime, il programma raggiungerà molto rapidamente la linea "if (result)". E non otterrai alcun risultato da UploadFile. –

Problemi correlati