ホーム > WPF > Converter

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);
        }
このページを共有:
  • このページをはてなブックマークに追加 このページを含むはてなブックマーク
  • このページをlivedoor クリップに追加 このページを含むlivedoor クリップ
  • このページをYahoo!ブックマークに追加
  • このページを@niftyクリップに追加
  • このページをdel.icio.usに追加
  • このページをGoogleブックマークに追加

このページのURL:

TOP