비동기 메서드를 사용하여 UI를 작동시키는 데 문제가 있습니다. 여기 내 코드의 일부이다async를 사용할 때 UI가 정지 함
private async void btnDoOutput_Click(object sender, RoutedEventArgs e)
{
/* Initiliaze */
groupBoxConfiguration.IsEnabled = false;
var progressIndicator = new Progress<int>();
progressIndicator.ProgressChanged += (s,value) =>
{
progressExport.Value = (double)value;
labelPercentage.Content = "Export in progress : " + value + " %";
};
/* do Work */
switch (something)
{
case 1:
await method(input, output, options, progressIndicator);
break;
default: break;
}
/* Finalization */
groupBoxConfiguration.IsEnabled = true;
}
방법은 진행이 끝날 때까지 표시되지 않습니다,
public async static Task<string> method(string input, string output, string options, IProgress<int> progress)
{
while(something)
{
//operations on input and output
if (progress != null)
{
progress.Report(percentage);
}
}
}
내 버튼의 UI 동결을 클릭
가의 그룹 상자는 여전히 사용할 수 있습니다.
을 반환합니다. 'method'는 아무 것도 반환하지 않지만'Task'입니다. Async/await는 "마술처럼 내 코드 비동기"가 아닙니다. "이 코드는 이미 비동기이며 작업하기 쉽습니다." 실제로 비동기식 코드에서 아무 것도 보이지 않습니다. –
cadrell0
비동기 방식의 진행보고 및 취소 기능을 사용하려면 다음 MSDN 링크를 사용해야합니다. http://blogs.msdn.com/b/dotnet/archive/2012/06/06/async-in-4 -5-enabling-progress-cancellation-in-async-apis.aspx –
'return Task.Factory.StartNew (() => {while (something) {...}})과 같은 것이 필요하다고 생각합니다. ' –
Grundy