protected override async Task <Action <AsyncCodeActivityContext> > ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken) { // Inputs var timeout = TimeoutMS.Get(context); var title = Title.Get(context); var initialpath = InitialPath.Get(context); // Set a timeout on the execution var task = ExecuteWithTimeout(context, cancellationToken); if (await Task.WhenAny(task, Task.Delay(timeout, cancellationToken)) != task) { throw new TimeoutException(Resources.Timeout_Error); } // Outputs return((ctx) => { SelectedFilePath.Set(ctx, task.Result); }); }
private async Task <string> ExecuteWithTimeout(AsyncCodeActivityContext context, CancellationToken cancellationToken = default) { var title = Title.Get(context); var defaultpath = InitialPath.Get(context); var result = string.Empty; var dlg = new CommonOpenFileDialog(); if (!string.IsNullOrEmpty(defaultpath)) { var index = defaultpath.LastIndexOf(@"\"); var dotindex = defaultpath.IndexOf(@".", index); if (dotindex < 0) { defaultpath = defaultpath + @"\"; } } if (!string.IsNullOrEmpty(title)) { dlg.Title = title; } if (!string.IsNullOrEmpty(Path.GetDirectoryName(defaultpath))) { dlg.InitialDirectory = Path.GetDirectoryName(defaultpath); } if (!string.IsNullOrEmpty(Path.GetFileName(defaultpath))) { dlg.DefaultFileName = Path.GetFileName(defaultpath); } if ((int)this.FileType >= 1) { var filter = new CommonFileDialogFilter(); filter.DisplayName = "許可されたファイル"; if (this.FileType.HasFlag(FileTypes.Excel)) { filter.Extensions.Add("xls"); filter.Extensions.Add("xlsx"); filter.Extensions.Add("xlsm"); } if (this.FileType.HasFlag(FileTypes.CSV)) { filter.Extensions.Add("csv"); } if (this.FileType.HasFlag(FileTypes.PDF)) { filter.Extensions.Add("pdf"); } if (this.FileType.HasFlag(FileTypes.Text)) { filter.Extensions.Add("txt"); } if (this.FileType.HasFlag(FileTypes.PowerPoint)) { filter.Extensions.Add("ppt"); filter.Extensions.Add("pptx"); } if (this.FileType.HasFlag(FileTypes.Word)) { filter.Extensions.Add("doc"); filter.Extensions.Add("docx"); } dlg.Filters.Add(filter); } else { dlg.Filters.Add(new CommonFileDialogFilter("すべてのファイル", "*.*")); } if (dlg.ShowDialog() == CommonFileDialogResult.Ok) { result = dlg.FileName; } return(await Task.FromResult(result)); }