현재 위대한 WriteableBitmapEx Framework를 사용하여 Windows Store (WinRT) 용 작은 이미지 편집 응용 프로그램을 작성하고 있습니다. .convolute와 같은 함수는 Surface에서 테스트 한 WinRT 장치에서 잠시 시간이 걸릴 수 있으므로 이러한 요청을 비동기 적으로 만들어 UI가 차단되지 않도록하고 진행률 링을 표시 할 수 있습니다.WriteableBitmapEx를 사용한 비동기 이미지 편집
이것은 지금까지 시도한 것으로 코드 자체가 작동합니다. 그러나 UI는 여전히 차단되고 링은 표시되지 않습니다. 코드를 실행하는 데 약 2 초가 걸립니다. 나는 그것을하지 않는 방법에 async
을 추가 언급 한 바와 같이
// Start Image editing when selection is changed
private async void FilterListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
progressRing.IsActive = true;
try
{
filteredImage = await FilterMethod.imageBW(originalImage, filteredImage);
}
catch
{
Debug.WriteLine("No items selected");
}
mainImage.Source = filteredImage;
progressRing.IsActive = false;
}
// Black & White
public static async Task<WriteableBitmap> imageBW(WriteableBitmap originalImage, WriteableBitmap filteredImage)
{
filteredImage = originalImage.Clone();
using (filteredImage.GetBitmapContext())
{
filteredImage.ForEach(ImageEdit.toGrayscale);
}
return filteredImage;
}
// Grayscale
public static Color toGrayscale(int x, int y, Color color)
{
byte gray = (byte)(color.R * .3f + color.G * .59f + color.B * .11f);
Color newColor = Color.FromArgb(255, gray, gray, gray);
return newColor;
}
당신은 리, 방법에'async'를 추가하면 자동적으로 백그라운드에서 일을 실행하여 비동기하지 않는 것을 알고 같습니다
블록은, 그래서 지금은 다음과 같습니다 응? 그리고 당신은 어떤 것도 기다리고 있지 않습니다 ... –
죄송합니다, 코드를 복사하는 것을 기다리고 있습니다. 백그라운드에서 어떻게 실행합니까? – Thomas
가장 쉬운 방법은'Task'에서 이미지를 회색조로 변환하는 전체 메서드를 래핑하여 백그라운드에서 실행하고 결과를 '대기'하는 것입니다. –