Натурально единственный способ - создать элемент , а затем имитировать щелчок, к сожалению.
Там крошечный плагин (бесстыдный плагин), который избавит вас от необходимости делать все это время: файл-диалог
fileDialog()
.then(file => {
const data = new FormData()
data.append('file', file[0])
data.append('imageName', 'flower')
// Post to server
fetch('/uploadImage', {
method: 'POST',
body: data
})
})
Я думаю, что это то, что вы ищете:
var tasks = new Task<MyMethodReturnObject>[3];
tasks[0] = GetFirstListFilesAsync();
tasks[1] = GetSecondListFilesAsync();
tasks[2] = GetThirdListFilesAsync();
// At this point, all three tasks are running at the same time.
// Now, we await them all.
await Task.WhenAll(tasks);
// Get an individual result, where result is MyMethodReturnObject
var myText = tasks[0].Result;
// Loop through results
var results = tasks.Select(o => o.Result).ToList();
foreach (var result in results)
{
Console.Write(result);
}
Источник: http://blog.stephencleary.com/2012/02/async-and-await.html
Просто отделите создание ваших ожиданий от фактического await
на них:
var firstWait = GetFirstListFilesAsync();
var secondWait = GetSecondListFilesAsync();
var thirdWait = GetThirdListFilesAsync();
firstList = await firstWait;
textBlock1.Text = "found " + firstList.Count + " first list's results";
secondList = await secondWait ;
textBlock2.Text = "found " + secondList.Count + " second list's results";
thirdList = await thirdWait ;
textBlock3.Text = "found " + thirdList.Count + " third list's results";
Это все еще не будет показывать результаты до тех пор, пока первый элемент не будет завершен, но позволит сделать параллельный ход. Это сложнее, если вы хотите иметь дело с каждым из , как , он завершается внутри одной функции, так как тогда вы должны WaitAny
собирать awaitables, а затем определять (вручную), какой из них ) завершены, удалите их из коллекции и зацикливайте до тех пор, пока все не закончите.
Вы можете попробовать и перенести работу в коллекцию Task
s и использовать Task.WaitAll
, чтобы присоединиться к потокам.
Используйте ответ Дэвида или так же просто, как сближение всех ожиданий, затем вызовите заданное текстовое значение следующим образом:
firstList = await GetFirstListFilesAsync();
secondList = await GetSecondListFilesAsync();
thirdList = await GetThirdListFilesAsync();
textBlock1.Text = "found " + firstList.Count + " first list's results";
textBlock2.Text = "found " + secondList.Count + " second list's results";
textBlock3.Text = "found " + thirdList.Count + " third list's results"
GetSecondListFilesAsync
не будет вызываться до тех пор, пока не ожидается, что GetFirstListFilesAsync
завершено.
– Damien_The_Unbeliever
28 April 2016 в 07:18
Я бы хотел, чтобы все ожидания выполнялись одновременно, поэтому все текстовые блоки будут обновляться более или менее одновременно. Или, может быть, не в одно и то же время - каждый TextBlock будет обновляться по мере завершения соответствующего метода ожидания.
blockquote>Затем определите несколько новых методов:
private async Task<TFirst> GetFirstListFilesAndDisplayAsync() { var firstList = await GetFirstListFilesAsync(); textBlock1.Text = "found " + firstList.Count + " first list's results"; } private async Task<TSecond> GetSecondListFilesAndDisplayAsync() { var secondList = await GetSecondListFilesAsync(); textBlock2.Text = "found " + secondList.Count + " second list's results"; } private async Task<TThird> GetThirdListFilesAndDisplayAsync() { var thirdList = await GetThirdListFilesAsync(); textBlock3.Text = "found " + thirdList.Count + " third list's results"; }
И затем вызовите все они одновременно:
var firstTask = GetFirstListFilesAndDisplayAsync(); var secondTask = GetSecondListFilesAndDisplayAsync(); var thirdTask = GetThirdListFilesAndDisplayAsync(); await Task.WhenAll(firstTask, secondTask, thirdTask); firstList = await firstTask; secondList = await secondTask; thirdList = await thirdTask;
Таким образом, вы не хотите группировать блоки await
, вы хотите указать, что происходит, когда они завершатся.
GetFirstListFilesAsync().ContinueWith(task => {
textBlock1.Text = "found " + task.Result.Count + " first list's results";
});
GetSecondListFilesAsync().ContinueWith(task => {
textBlock2.Text = "found " + task.Result.Count + " second list's results";
});
GetThirdListFilesAsync().ContinueWith(task => {
textBlock3.Text = "found " + task.Result.Count + " third list's results";
});
Этот способ будет самым быстрым способом сделать это, потому что как как только Task
завершится, ваш textBlock.Text
будет установлен, и они не будут ждать завершения предыдущего.
code
var results = tasks.Select (o = & gt; o.Result) .ToList (); foreach (var result in results) {// Делаем что-то с результатом - result.Count; }code
– jondow 28 April 2016 в 07:53firstList = tasks[0].Result;
– Stamos 28 April 2016 в 15:09