SlideShare a Scribd company logo
3
Most read
7
Most read
9
Most read
@yone64
Wpfと非同期
 Controlに対し、非同期にプロパティーへのアクセス
やオブジェクトの生成を行うと例外が発生する
Wpfと非同期
 TaskSchedulerで、同期コンテキストを指定する。
var t = Task.Factory.StartNew(() =>
{
var s = textBox1.Text;
},
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext());
 Dispatcherを使い実行する。
◦ Invoke, BeginInvoke, InvokeAsyncなど
var t = Task.Run(() =>
{
textBox1.Dispatcher.Invoke(() =>
{
var s = textBox1.Text;
});
});
 優先度付キュー
◦ 優先度が高いものから実行されていく
 DispatcherPriority
◦ Send
◦ Normal
◦ DataBind
◦ Render
◦ Loaded
◦ Input
◦ Background
◦ ContextIdle
◦ ApplicationIdle
◦ SystemIdle
◦ Inactive
◦ Invalid
Send
Normal
DataBind
Render
① ②
③
var dispatcher = Application.Current.Dispatcher;
dispatcher.BeginInvoke(new Action(() => Console.WriteLine("No1")),
DispatcherPriority.Normal);
Console.WriteLine("No2");
dispatcher.BeginInvoke(new Action(() => Console.WriteLine("No3")),
DispatcherPriority.Render);
dispatcher.BeginInvoke(new Action(() => Console.WriteLine("No4")),
DispatcherPriority.Send);
dispatcher.Invoke(new Action(() => Console.WriteLine("No5")),
DispatcherPriority.DataBind);
Console.WriteLine("No6");
 非同期処理とはいえ、UIスレッドで処理を行うので、
描画は固まります。
 バックグランドスレッドでできることは、極力バックグラ
ウンドスレッドでやりましょう。
 バックグラウンドスレッドでの処理待ち後に、実行する
ために。
 Frameworkの処理を先に実行させるために。
Wpfと非同期
DependencyObject
DispatcherObject
Freezable Visual
UIElement ContainerVisual
FrameworkElement
Control
 プロパティーへのアクセス
◦ Freezableのサブクラスは、Freezeすることで別スレッドから
もアクセス可能になる
 オブジェクトの生成
◦ 生成ができないのは、FrameworkElementのサブクラス
◦ FrameworkElementのサブクラスでも、ThreadをSTAにす
れば生成可能
 BitmapImageやBrushをバックグラウンドで作成し、
利用する。
Task.Run(() =>
{
var sr = new MemoryStream(
new WebClient().DownloadData(new Uri("http://xx/img/1.jpg")));
var bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.StreamSource = sr;
bi.EndInit();
bi.Freeze();
Application.Current.Dispatcher.Invoke(() =>
{
image.Source = bi;
});
});
 メッセージプールを複数作成する。
var thread = new Thread(() =>
{
var dispacherFrame = new DispatcherFrame(true);
var w = new Window {Width = 800, Height = 600};
var p = new WrapPanel {Orientation = Orientation.Horizontal};
w.Content = p;
for (int i = 0; i < 20000; i++)
{
p.Children.Add(new Button
{
Height = 30,
Width = 120,
Content = "ボタン" + i,
});
}
w.Closed += (o, args) => dispacherFrame.Continue = false;
w.Show();
Dispatcher.PushFrame(dispacherFrame);
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Wpfと非同期
 BingはそもそもUIスレッドで処理される。
◦ Backgroundからさわっても大丈夫
<TextBox Text="{Binding Text}" Height="23" Width="120" />
Task.Run(() =>
{
// エラーにならない
_vm.Text = DateTime.Now.ToString();
});
 Binding経由でもCollection経由の場合は、非同期
アクセスすると例外が発生する
 .Net4.5の場合
◦ BindingOperations.EnableCollectionSynchronization
BindingOperations
.EnableCollectionSynchronization(Items, new object());
 非同期といえば、Rxだよねって貴方に
 「ReactivePropertyで流れるようなWPF開発を!」
by xin9le
 メッセージループをアプリケーション内で複数作ってみ
る - 亀岡的プログラマ日記
◦ http://posaune.hatenablog.com/entry/2013/05/21
/010735
 ReactiveProperty
◦ http://reactiveproperty.codeplex.com/

More Related Content

PDF
データベース設計徹底指南
Mikiya Okuno
 
PDF
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
 
PDF
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
 
PDF
WPF開発での陥りやすい罠
Sho Okada
 
PDF
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 
PDF
オブジェクト指向できていますか?
Moriharu Ohzu
 
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
 
PDF
Marp入門
Rui Watanabe
 
データベース設計徹底指南
Mikiya Okuno
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
 
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
 
WPF開発での陥りやすい罠
Sho Okada
 
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 
オブジェクト指向できていますか?
Moriharu Ohzu
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
 
Marp入門
Rui Watanabe
 

What's hot (20)

PDF
PHPでWebSocketを実装してみてわかったこと
ksimoji
 
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
PDF
ruby-ffiについてざっくり解説
ota42y
 
PDF
転置インデックスとTop k-query
正志 坪坂
 
PDF
こわくない Git
Kota Saito
 
PPTX
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
PPTX
Msを16倍出し抜くwpf開発2回目
cct-inc
 
PDF
20分でわかるgVisor入門
Shuji Yamada
 
PPTX
C#や.NET Frameworkがやっていること
信之 岩永
 
PDF
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
Unity Technologies Japan K.K.
 
PDF
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
PDF
今さら聞けないDiとspring
土岐 孝平
 
PDF
DI(依存性注入)について
Yui Ito
 
PDF
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
PDF
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
Satoshi Shimazaki
 
PDF
すごい constexpr たのしくレイトレ!
Genya Murakami
 
PDF
Marp Tutorial
Rui Watanabe
 
PHPでWebSocketを実装してみてわかったこと
ksimoji
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
ruby-ffiについてざっくり解説
ota42y
 
転置インデックスとTop k-query
正志 坪坂
 
こわくない Git
Kota Saito
 
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
 
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
Msを16倍出し抜くwpf開発2回目
cct-inc
 
20分でわかるgVisor入門
Shuji Yamada
 
C#や.NET Frameworkがやっていること
信之 岩永
 
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
Unity Technologies Japan K.K.
 
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
 
今さら聞けないDiとspring
土岐 孝平
 
DI(依存性注入)について
Yui Ito
 
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
Satoshi Shimazaki
 
すごい constexpr たのしくレイトレ!
Genya Murakami
 
Marp Tutorial
Rui Watanabe
 
Ad

Similar to Wpfと非同期 (20)

PPTX
An other world awaits you
信之 岩永
 
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
 
PDF
いまさら恥ずかしくてAsyncをawaitした
Kouji Matsui
 
PDF
Windows ストア アプリでスレッド間排他処理
Yasuhiko Yamamoto
 
PDF
async/awaitダークサイド is 何
Kouji Matsui
 
PDF
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
 
PDF
Windows 8時代のUXを支える非同期プログラミング
Yuya Yamaki
 
PDF
これからの「async/await」の話をしよう
Kouji Matsui
 
PPTX
async/await のしくみ
信之 岩永
 
PDF
Async History in .NET
Takaaki Suzuki
 
PDF
async/await不要論
bleis tift
 
PPTX
Lt 111119
Tomoyuki Obi
 
PDF
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
 
PPTX
非同期処理の基礎
信之 岩永
 
PDF
C#アプリの高速化web
森理 麟
 
PPTX
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
Yasuhiko Yamamoto
 
PPTX
Orange Cube 自社フレームワーク 2015/3
信之 岩永
 
PDF
Async design with Unity3D
Kouji Hosoda
 
PPTX
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Tusyoshi Matsuzaki
 
PPTX
C# 8.0 非同期ストリーム
信之 岩永
 
An other world awaits you
信之 岩永
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
 
いまさら恥ずかしくてAsyncをawaitした
Kouji Matsui
 
Windows ストア アプリでスレッド間排他処理
Yasuhiko Yamamoto
 
async/awaitダークサイド is 何
Kouji Matsui
 
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
 
Windows 8時代のUXを支える非同期プログラミング
Yuya Yamaki
 
これからの「async/await」の話をしよう
Kouji Matsui
 
async/await のしくみ
信之 岩永
 
Async History in .NET
Takaaki Suzuki
 
async/await不要論
bleis tift
 
Lt 111119
Tomoyuki Obi
 
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
 
非同期処理の基礎
信之 岩永
 
C#アプリの高速化web
森理 麟
 
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
Yasuhiko Yamamoto
 
Orange Cube 自社フレームワーク 2015/3
信之 岩永
 
Async design with Unity3D
Kouji Hosoda
 
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Tusyoshi Matsuzaki
 
C# 8.0 非同期ストリーム
信之 岩永
 
Ad

More from yone64 (7)

PPTX
C sharp6
yone64
 
PPTX
XAML & XAML
yone64
 
PPTX
Reactive extensions
yone64
 
PPTX
もう一つのLINQ ~ Queryable入門
yone64
 
PPTX
超Linq入門 実践編
yone64
 
PPTX
超LINQ入門
yone64
 
PPTX
とあるアプリの設計進化
yone64
 
C sharp6
yone64
 
XAML & XAML
yone64
 
Reactive extensions
yone64
 
もう一つのLINQ ~ Queryable入門
yone64
 
超Linq入門 実践編
yone64
 
超LINQ入門
yone64
 
とあるアプリの設計進化
yone64
 

Recently uploaded (11)

PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 

Wpfと非同期