Вот код по большей части:Удаление обратного вызова внутри для-каждого цикла
foreach (var file in dialog.Files.Where(someConditionsGoHere).AsEnumerable())
{
Images imageRec = this.CreateNew<Images>();
imageRec.Description = file.Name;
imageRec.AsOfDate = System.DateTime.Now;
// inits some more fields here
using (System.IO.Stream fileStream = file.OpenRead())
{
byte[] fileBytes = new byte[System.Convert.ToInt32(fileStream.Length)];
fileStream.Read(fileBytes, 0, fileBytes.Length);
if (imageRec.Extension.ToUpper() == "TIFF" || imageRec.Extension.ToUpper() == "TIF")
{
// pop a yes/no dialog to convert to PDF.
Action<UI.Interactivity.InteractionRequest.YesNoDialog.YesNoDialogConfirmation> callback = c =>
{
if (c.Yes)
{
foreach (var tiffFile in dialog.Files)
{
string ext = tiffFile.Extension.Substring(1);
if (ext.ToUpper() != "TIF" && ext.ToUpper() != "TIFF") continue;
using (System.IO.Stream tiffFileStream = tiffFile.OpenRead())
{
byte[] tiffFileBytes =
new byte[System.Convert.ToInt32(tiffFileStream.Length)];
tiffFileStream.Read(tiffFileBytes, 0, tiffFileBytes.Length);
Images imageRec2 = this.CreateNew<Images>();
imageRec2.Description = tiffFile.Name;
imageRec2.Extension = "pdf";
// some more inits and sutff here too.
ImagingUtilities.ConvertImgToPDF(tiffFileBytes, imageRec2)
}
}
}
else
{
this.SaveAndAddImage(imageRec, fileBytes, file.Name);
}
};
this.OpenYesNoDialog("Do you want to convert Tiff files to PDF before saving them?", callback);
}
else
{
this.SaveAndAddImage(imageRec, fileBytes, file.Name);
}
}
}
В настоящее время он показывает YesNo dialog
в то время как цикл через образы в и если этот образ является ".tiff"
файл это переходит к методу callback
с диалогом YesNo
, запрашивающим, хочет ли пользователь преобразовать его в PDF
. Проблема в том, что я не хочу, чтобы он запрашивал у пользователя каждый файл tiff
, я хочу, чтобы он запрашивал только один раз, поэтому я должен вынуть callback
из for-each loop
, но когда я это делаю, я теряю порядок, в котором команды получая вызов из-за атрибута async
обратного вызова. Может кто-нибудь помочь с реструктуризацией этого?
Вы видите, 'если (c.Yes)'? Считаете ли вы, что это может быть переменная, которую вы вводите? – CodeCaster
Вы всегда можете сделать две петли. Первый, чтобы узнать, есть ли файл .tiff', затем запросите диалог YesNo. затем используйте вторую для преобразования файлов. –
@CodeCaster yes Я могу сохранить ответ c.Yes в переменной, если это был ваш вопрос. – Bohn