private async void DispatcherButton_Click(object sender, RoutedEventArgs e)
        {
            // UIスレッド以外(Task)だがDispatcher経由での呼び出しなのでOK
            var d = new DrivedObject();

            await Task.Run(async() =>
            {
                /* DispatcherObject.CheckAccess()
                 *  現スレッドが DispatcherObject に紐付けられたスレッドかチェックし、
                 *  UIスレッドでなければ false を返す
                 */
                if (!d.CheckAccess())
                {
                    await d.Dispatcher.InvokeAsync(() =>
                    {
                        // DispatcherObjectからのデータ取得も、DataContextの書き替えも両方OK
                        DataContext = "DispatcherButton: " + d.GetData();
                    });
                }
            });
        }