Converter
非同期Converter
[ValueConversion(typeof(string), typeof(BitmapImage))] public class ImageConverter : IValueConverter { /// <summary> /// ファイルパスから画像に変換します /// </summary> /// <param name="value">filePath</param> /// <param name="targetType">Image</param> /// <param name="parameter">パラメータ</param> /// <param name="culture">言語</param> /// <returns>BitmapImage</returns> public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { BitmapImage bi = null; DoAsync(() => { // 明示的に、非同期処理を同期処理するまで待ちます。 bi = ImageUtil.GetImage((string)value).Result; }); return bi; } /// <summary> /// BitmapImageからファイルパスに変換します。 /// 本システムでは利用しないため、未実装 /// </summary> /// <param name="value"></param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns></returns> public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } /// <summary> /// 非同期で処理を実行します。 /// </summary> /// <param name="action"></param> private void DoAsync(Action action) { DispatcherFrame frame = new DispatcherFrame(); new System.Threading.Thread((System.Threading.ThreadStart)(() => { action(); frame.Continue = false; })).Start(); Dispatcher.PushFrame(frame); }
このページのURL: