Je Familiarisation avec C# jour par jour et je suis tombé sur ce morceau de codebesoin d'une explication sur ce code - C#
public static void CopyStreamToStream(
Stream source, Stream destination,
Action<Stream,Stream,Exception> completed) {
byte[] buffer = new byte[0x1000];
AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(null);
Action<Exception> done = e => {
if (completed != null) asyncOp.Post(delegate {
completed(source, destination, e); }, null);
};
AsyncCallback rc = null;
rc = readResult => {
try {
int read = source.EndRead(readResult);
if (read > 0) {
destination.BeginWrite(buffer, 0, read, writeResult => {
try {
destination.EndWrite(writeResult);
source.BeginRead(
buffer, 0, buffer.Length, rc, null);
}
catch (Exception exc) { done(exc); }
}, null);
}
else done(null);
}
catch (Exception exc) { done(exc); }
};
source.BeginRead(buffer, 0, buffer.Length, rc, null);
}
De cet article Article
Qu'est-ce que Je n'arrive pas à suivre est-ce que comment le délégué est-il averti que la copie est faite? Dire une fois la copie terminée, je veux effectuer une opération sur le fichier copié.
Et oui, je sais que cela peut me dépasser étant donné mes quelques années en C#.
Jon: Si je disais que je voulais signaler à une base de données que la copie est terminée, comment est-ce que je définirais cela dans ce code? – ltech
@ltech: Vous passeriez une action appropriée (qui notifiait la base de données) comme argument pour le paramètre 'completed'. –
Jon: donc ce changement Action done = e => { if (terminé! = Null) asyncOp.Post (délégué { terminé (source, destination, e);}, null); }; à action done = e => { si asyncOp.Post (délégué { terminé (source, destination, e, DBWork());}, null) (terminée! = Null); }; –
ltech