Recommended
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
FridaによるAndroidアプリの動的解析とフッキングの基礎
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
最強オブジェクト指向言語 JavaScript 再入門!
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ゲームアプリの数学@GREE GameDevelopers' Meetup
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
An other world awaits you
C#次世代非同期処理概観 - Task vs Reactive Extensions
More Related Content
カリギュラオーバードーズにおけるUE4へのデータ移植の手引き
What's hot (20)
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
FridaによるAndroidアプリの動的解析とフッキングの基礎
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
最強オブジェクト指向言語 JavaScript 再入門!
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ゲームアプリの数学@GREE GameDevelopers' Meetup
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
Similar to Wpfと非同期 (20) An other world awaits you
C#次世代非同期処理概観 - Task vs Reactive Extensions
Windows ストア アプリでスレッド間排他処理
パターンでわかる! .NET Coreの非同期処理
Windows 8時代のUXを支える非同期プログラミング
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Reactive Extensionsで非同期処理を簡単に
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
Orange Cube 自社フレームワーク 2015/3
Async design with Unity3D
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Wpfと非同期
5. TaskSchedulerで、同期コンテキストを指定する。
var t = Task.Factory.StartNew(() =>
{
var s = textBox1.Text;
},
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext());
6. Dispatcherを使い実行する。
◦ Invoke, BeginInvoke, InvokeAsyncなど
var t = Task.Run(() =>
{
textBox1.Dispatcher.Invoke(() =>
{
var s = textBox1.Text;
});
});
7. 優先度付キュー
◦ 優先度が高いものから実行されていく
DispatcherPriority
◦ Send
◦ Normal
◦ DataBind
◦ Render
◦ Loaded
◦ Input
◦ Background
◦ ContextIdle
◦ ApplicationIdle
◦ SystemIdle
◦ Inactive
◦ Invalid
Send
Normal
DataBind
Render
① ②
③
8. 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");
14. 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;
});
});
15. メッセージプールを複数作成する。
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();
20. メッセージループをアプリケーション内で複数作ってみ
る - 亀岡的プログラマ日記
◦ http://posaune.hatenablog.com/entry/2013/05/21
/010735
ReactiveProperty
◦ http://reactiveproperty.codeplex.com/