Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
[C#]Copia Files grosse dimensioni blocca l'applicazione
martedì 24 aprile 2012 - 11.07
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
HardTekCrash
Profilo
| Newbie
29
messaggi | Data Invio:
mar 24 apr 2012 - 11:07
Salve a tutti raga :)
Ho quasi finito il programma per fare Backup.
Ho solo un problema...quando copio files di grosse dimensione l'applicazione rimane impallata.
Il software in questione copia tutti i files che trova in una determinata cartella,quindi con un foreach
foreach (string fls in Directory.GetFiles(SourcePath))
utilizzo la funzione per copiare,quindi copia ogni files singolarmente e inserisce dentro un ListView il percorso del file che copia.
Ho inserito anche una progressbar però il problema è questo:
Quando parte la copia il programma rimane impallato (quindi non da la lista dei files che sta copiando uno a uno e la progress bar non aumenta il value) ma a fine copia (con il software impallato) l'applicazione si sblocca e mi da già la lista con tutti i files e la progressbar al 100%.
Vorrei capire se c'è una soluzione per non tenere impallato l'applicazione e che aggiorni sulla copia dei files man mano che questi vengono rilevati e copiati.
Grazie a tutti anticipatamente,
vi saluto e vi auguro buona giornata a tutti.
massimo.missaglia
Profilo
| Newbie
34
messaggi | Data Invio:
mar 24 apr 2012 - 11:55
Ciao,
utilizza un metodo asincrono.
http://msdn.microsoft.com/it-it/library/2e08f6yc
(v=vs.80).aspx
Massimo Missaglia
-------------------------------
www.MassimoMissaglia.com
HardTekCrash
Profilo
| Newbie
29
messaggi | Data Invio:
mar 24 apr 2012 - 12:48
Grazie Massimo, sei sempre in mio soccorso :)
Però il problema è che sto guardando il metodo Async però non mi corrisponde con quello che è spiegato li.
Credo sia per il fatto che io sto utilizzando il FrameWork 4 e invece la funzione necessita del 2,anche se ho provato ad inserirlo nelle referenze ma non lo trovo.
Io mi ritrovo con:
AsyncCallback,AsyncCompletedEventArgs,AsyncCompletedEventHandler,AsyncFlowControl,AsyncOperation,AsyncOperationManager,IAsyncResult,InvalidAsynchronousStateException.
Riusciresti a farmi un piccolo esempio utilizzando File.CopyTo?Leggendo li ho capito un po il funzionamento però non riesco ad utilizzarlo.
Ho inserito un Thread.Sleep è la cosa è migliorata,mettendo una piccola pausa alla copia di ogni files devo dire che è migliorato,il programma non si blocca e la barra funziona.
Solo che il discorso è sempre quello,alla fine del processo mi appare il tutto nel ListView.
Come posso usare al meglio questa funzione Async?
Ti ringrazio ancora,mi stai veramente aiutando moltissimo :)
Grazie e buona giornata
massimo.missaglia
Profilo
| Newbie
34
messaggi | Data Invio:
mar 24 apr 2012 - 13:17
Un esempio ...
public class AsyncFileCopier
{
public delegate void FileCopyDelegate(string sourceFile, string destFile);
public static void AsynFileCopy(string sourceFile, string destFile)
{
FileCopyDelegate del = new FileCopyDelegate(FileCopy);
IAsyncResult result = del.BeginInvoke(sourceFile, destFile, CallBackAfterFileCopied, null);
}
public static void FileCopy(string sourceFile, string destFile)
{
File.Copy(sourceFile, destFile);
}
public static void CallBackAfterFileCopied(IAsyncResult result)
{
//...
}
}
private void Form1_Load(object sender, EventArgs e)
{
DirectoryInfo dInfo=new DirectoryInfo(@"C:\prova");
foreach (FileInfo f in dInfo.GetFiles() )
AsyncFileCopier.AsynFileCopy(f.FullName, @"D:\prova\" + f.Name);
}
http://msdn.microsoft.com/it-it/library/2e08f6yc
(v=vs.100).aspx
Massimo Missaglia
-------------------------------
www.MassimoMissaglia.com
HardTekCrash
Profilo
| Newbie
29
messaggi | Data Invio:
mar 24 apr 2012 - 15:23
Grande Massimo!!!!
Funziona alla grande!!!!! :)
Posso chiederti un'ultima cosa?Giuro che è l'ultima
In
public static void CallBackAfterFileCopied(IAsyncResult result)
{
}
sto cercando di passare il ListView che ho nel Form1 per tracciare ogni file copiato,del tipo:
public static void CallBackAfterFileCopied(IAsyncResult result)
{
listView1.Items.Add(file.Name);
}
però non riesco a passare il listView1 (credo perchè sia static).
Sto tentando in diversi modi,anche a modificare direttamente FileCopyDelegate e passargli un ListView ma non riesco.
Hai qualche soluzione?
Grazie ancora e scusa le domande un po banali,sono ancora un Junior alle prime armi :)
Ciao e buona giornata.
HardTekCrash
Profilo
| Newbie
29
messaggi | Data Invio:
gio 26 apr 2012 - 15:21
UP...
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !