我正在创建一个处理本地文件到Azure帐户传输的应用程序。 如果是目录,我会建立一个文件列表以异步传输。
我正在使用进度处理程序来实时跟踪每个文件传输的字节数。它使用一个Action对象。像这样:
Action<TransferStatus> action = (status) => {
Console.WriteLine("Transfered bytes: {0}", status.BytesTransferred);
};
其中“操作”在系统中定义为
public delegate void Action<in T>(T obj)
TransferStatus是一个密封类,不包含任何方法,仅包含四个属性(BytesTransferred,NumberOfFilesTransferred,NumberofFilesSkipped,NumberOfFilesFailed),但与输入资源无关。
最后,每次我必须跟踪转移进度时:
Progress<TransferStatus> progress = new Progress<TransferStatus>(action);
SingleTransferContext context = new SingleTransferContext(null);
context.ProgressHandler = progress;
但是,我想在操作主体中知道涉及哪个资源(即源文件),如下所示:
Action<TransferStatus> action = (status) => {
Console.WriteLine("File: {0}", getFile()); // ???
Console.WriteLine("Transfered bytes: {0}", status.BytesTransferred);
};
动作不是类而是委托,因此无法扩展(当无法理解每个文件的动作时,无法添加属性来分配输入资源)。 由于状态不是由我自己确定的,因此无法使用字典将状态链接到文件。同上行动(不可能在代表体内使用关键字“ this”)。
也许有一种简单的方法可以从操作中获取文件名? 任何人都知道Azure API吗?
谢谢。
答案 0 :(得分:0)
我解决了这个问题。这是一个错误的问题。