Io ho trovato una soluzione diversa dalla tua zero85, e non mi sembra che tu abbia creato un thread ulteriore.
per prima cosa ho impostato MVC++ (il compilatore) con l'opzione \MT per il multithread. poi ho creato un thread nuovo
codice:
void Thread(PVOID pvoid)
{
hOpen = InternetOpen("",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
hFtp = InternetConnect(hOpen,cfg.server,INTERNET_DEFAULT_FTP_PORT,cfg.user,cfg.pass,INTERNET_SERVICE_FTP,0,0);
hFile = FtpOpenFile(hFtp,"Prova_arch.rar",
GENERIC_WRITE,FTP_TRANSFER_TYPE_BINARY,0);
file = CreateFile("Prova_arch.rar",GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
sum = 0;
do
{
ReadFile (file, Buffer, sizeof(Buffer),&dwBytesRead, NULL);
InternetWriteFile(hFile,Buffer,dwBytesRead,&dati_scritti);
SendMessage(hProgressBar,PBM_SETPOS,(WPARAM)(int)sum/2048,0);
sum +=dati_scritti;
}
while(sum < Size);
InternetCloseHandle(hOpen);
InternetCloseHandle(hFile);
InternetCloseHandle(hFtp);
CloseHandle(file);
_endthread();
}
tralasciando che io faccio una "copia" in remoto.
Per avviare l'upload premo un BUTTON che ha ID IDM_AVVIA
codice:
case IDM_AVVIA:
_beginthread(Thread,0,NULL);
break;
e uso _beginthread.
A me funziona benissimo, anche se provo a trasferire 80Mb la progressbar non si ferma mai, neanche se provo a spostare la finestra.
Spero di essere stato d'aiuto e spero che quello che ho fatto sia esatto.