- 1 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 05:53:16.97 ID:oY263ilm.net]
- WPF(Windows Presentation Foundation)について語るスレ。
前スレ WPF(.NET, WinUI) GUIプログラミング Part30 https://mevius.5ch.net/test/read.cgi/tech/1667010874/ 関連スレ Windows 10 UWPアプリ開発Part 3 https://mevius.5ch.net/test/read.cgi/tech/1627556967/ コードを貼る場合は以下のサイトの利用をお勧め。 https://ideone.com/
- 528 名前:デフォルトの名無しさん [2023/06/10(土) 19:24:56.04 ID:qtkeuH21.net]
- 非同期は難しいね。非同期のつもりが同期してたり。
サンプル拾ってきて動かして挙動確認するのが一番。
- 529 名前:デフォルトの名無しさん mailto:sage [2023/06/11(日) 01:55:12.82 ID:k29VIOYt.net]
- ConfugureAwait 指定すべきか否かの判断が未だによくわからん
- 530 名前:デフォルトの名無しさん mailto:sage [2023/06/11(日) 09:34:14.95 ID:VM7cO91o.net]
- UIスレッドに戻る必要がある場合はConfigureAwait()なしかtrue指定かということは、
MVVMで作っていたらConfigureAwait(false)だらけでも問題ないのだろうか。
- 531 名前:デフォルトの名無しさん mailto:sage [2023/06/11(日) 10:38:19.76 ID:a75z9osJ.net]
- Dispatcherを使う
- 532 名前:デフォルトの名無しさん [2023/06/11(日) 11:54:47.66 ID:4FWqmBm0.net]
- そいやConfigureAwaitって使ったことないな
- 533 名前:デフォルトの名無しさん [2023/06/11(日) 18:49:49.54 ID:Fv6Y3hW8.net]
- 初めて見たw
- 534 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 13:48:23.01 ID:qz0idZVe.net]
- ConfigurrAwait(true) にしようと思っても、意地でも MVVM にしないやつがいるせいでできない。
WinForms か VB でもやってろよバカと言いたくなる
- 535 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 13:50:33.63 ID:qz0idZVe.net]
- false だった
- 536 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 23:34:58.91 ID:wuTw7wyz.net]
- MVVMでもPropertyChangedしたらUIスレッドでやれって怒られるしどうしようもなくね
- 537 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 00:24:07.79 ID:Y05jGU7w.net]
- WPF 限定かもだけど INotifyPropertyChanged.PropertyChanged イベントは
ちゃんと UI スレッドにディスパッチしてくれるようになってる。 非 UI スレッドから VM を操作しても問題ない。 ObservableCollection とかは一工夫いるけど。 (BindingOperations.EnableCollectionSynchronization)
- 538 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 00:31:49.19 ID:1h3p4bkQ.net]
- コマンド使えよ
- 539 名前:デフォルトの名無しさん [2023/06/15(木) 15:10:54.81 ID:rRvNWqra.net]
- Task を直接 await しないで下さい。
Task.ConfigureAwait(Boolean) を呼び出して継続の意図を示すことを検討してください。 https://learn.microsoft.com/ja-jp/dotnet/fundamentals/code-analysis/quality-rules/ca2007
- 540 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 16:36:37.39 ID:yjHL9xaz.net]
- 全部trueで困ったことないな
falseにして劇的にパフォーマンスあがったという体感もない ゲームだとシビアなのかもしれんが多分他にやることあるだろう
- 541 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 17:51:20.80 ID:yjHL9xaz.net]
- ちょっと実験してわからなくなった
asp.net mvc (クラシック)で自己再帰でthread idとurlをデバッグ出力してDelayするだけのコードを動かした ConfigureAwait(falae)してないのに戻ってきた後のthread idが変わってる にもかかわらずコンテキストからurlはちゃんと取れてる
- 542 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 17:58:34.24 ID:yjHL9xaz.net]
- continueOnCapturedContext
Boolean 継続をキャプチャされた元のコンテキストにマーシャリングする場合は true。それ以外の場合は false。 元のコンテキストとしか書いてないから同じスレッドに戻る保証はないのか 知らなかった
- 543 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 18:32:41.75 ID:AU7Lfb35.net]
- >>532
なにをどーしたらそんな風になるの?
- 544 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 23:40:26.44 ID:akjjH2QK.net]
- 何もしなくてもやってくれんじゃん
- 545 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 23:54:36.14 ID:rRvNWqra.net]
- C#使ってて思うのは、細かいところ気にしなくても、公式ライブラリ自体が色々配慮してくれてるんだよね。
自分も一層心掛けるわ。
- 546 名前:デフォルトの名無しさん mailto:sage [2023/06/16(金) 07:08:56.02 ID:g6vkIwv2.net]
- >>537
同期コンテキストによるので、 ・GUIアプリケーション(の同期コンテキスト)だとtrueで元のスレッドに戻る ・コンソールアプリケーション(の同期コンテキスト)だとtrueでも元のスレッドに戻らない だったかと。
- 547 名前:デフォルトの名無しさん [2023/06/19(月) 19:44:51.70 ID:qIw288aX.net]
- https://imgur.com/a/KIpYdS4
心電図(?)作ってみた。 ソケットや共有メモリで他機器からデータ受信してリアルタイム表示。 アイコンは飾り。画像貼ってるだけ。 プログラムはじめて40年以上。まだまだ若いもんには負けねーぜw
- 548 名前:デフォルトの名無しさん [2023/06/20(火) 18:14:26.86 ID:mfTYjI5Q.net]
- やっぱUIデザイナーって専門で必要なのかなと感じた
- 549 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 18:51:52.94 ID:Op03/FKW.net]
- >>542
40年でそれはさすがに負けてんぞ 俺が学生の時はオシロスコープのデータ解析は学生が自分たちでプログラム組んでやってたからな 端末はDOSだったわ
- 550 名前:デフォルトの名無しさん [2023/06/20(火) 19:04:46.49 ID:UreReEmE.net]
- x86 (MASM)でGDC直叩きでやってたこと考えると高級言語で出来ちゃう今が
凄いよな。
- 551 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 19:15:29.15 ID:LcGR2FrV.net]
- >>542
グラフ部分の描画はWPF標準のCanvas?
- 552 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 19:52:46.25 ID:FDgZeyem.net]
- >>542
良く出来ていると思いますよ。 普通にプロレベルに達していますね。 これだけの物を作れる人は少数派です。
- 553 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 19:57:28.04 ID:FDgZeyem.net]
- 「俺も同じようなもの作れるわ」
と思っている人の作品見てみると、細かい部分がちゃんと出来て無い ことが多いです。 細部までちゃんとしているものを作れて無いのに、同じだと思っているだけ。
- 554 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 20:18:02.54 ID:SIobN1qD.net]
- 悔しそうで草
- 555 名前:デフォルトの名無しさん [2023/06/20(火) 20:58:16.66 ID:FA7f5bQf.net]
- >>547
>>548 「プロレベル」がなんなのか分からないけど「細かい部分」を見ると、 画質悪いのもあるけどボタン?のアイコンが何だか分からない… あと、スライダーの部分は数値入力なしで全部スライダーで大丈夫だろうか? あと、RGBがちょっと邪魔な感じで、右端のボタンが小さくなってて押しにくそう あと、スライダーとRGBの間にあるチェックボックス?はテキスト位置を上にして他と揃えた方が良さそう という気がするけどどう?
- 556 名前:デフォルトの名無しさん [2023/06/20(火) 21:13:52.23 ID:UreReEmE.net]
- https://www.youtube.com/watch?v=sQTcqKGBj1c&ab_channel=MedicalEngineer
これの真似しただけ。アイコン画像もここからコピー。だから解像度も低い。 (アイコンは飾り。画像貼ってるだけ。 って書いておいたけど) 細かいこと言ったら切りないだろ〜。遊びで作ったもんだし。。 canvas にline()で書いてる。
- 557 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 21:24:25.92 ID:iJMYm/hz.net]
- 白い巨塔のバイタル警告音を思い出す
- 558 名前:デフォルトの名無しさん mailto:sage [2023/06/20(火) 22:13:50.37 ID:91aDk3JE.net]
- WPFでWinUI 使っている人いますか?
なんかやり方がよくわからないんだけど わかりやすいサイトありますか?
- 559 名前:デフォルトの名無しさん mailto:sage [2023/06/21(水) 03:24:12.51 ID:i5eSB4dS.net]
- >>553
https://learn.microsoft.com/ja-jp/windows/apps/desktop/modernize/host-custom-control-with-xaml-islands#add-a-control-from-the-winui-2-library-to-the-custom-control
- 560 名前:デフォルトの名無しさん mailto:sage [2023/06/22(木) 05:58:37.42 ID:d9imgnzP.net]
- 同じようなものは誰でも作れる。
新創造に価値がある。 畢竟、思想に価値があると言える。
- 561 名前:デフォルトの名無しさん mailto:sage [2023/06/22(木) 12:08:51.67 ID:f4QrThnD.net]
- 口だけならなんとでも言える
動いてる物を出せよ無能
- 562 名前:デフォルトの名無しさん [2023/06/22(木) 20:18:12.49 ID:2/GtWGn8.net]
- グラフ表示の事か?
基本的な非同期の知識とcanvasに線が書ければ後は頑張り(?)次第。 手練れは頑張りなんて不要なんだろうけど、基本動作まで自分は2時間は掛かった。 始めはWinFormsだったけど勉強がてらWPF版も作ってみた。 後者の方が綺麗で動きもよかった。 自己満足だが真似する時はどれだけそっくりに作れるかこだわると面白い。
- 563 名前:デフォルトの名無しさん mailto:sage [2023/06/22(木) 21:00:45.20 ID:CCzLUMWa.net]
- WPFの描画機能は規模が大きくなると速度低下が激しいのが残念
SkiaSharp等を使えば一応回避出来るけど
- 564 名前:デフォルトの名無しさん mailto:sage [2023/06/22(木) 22:05:57.96 ID:oInj3jkO.net]
- UWPとWindowsAppSDKだと、Win2DというDirect2Dの公式ライブラリがありますね
一回使ったけど流石に早かった
- 565 名前:デフォルトの名無しさん mailto:sage [2023/06/23(金) 00:18:21.51 ID:HwDl1XJv.net]
- DrawingVisualで描画すれば速いよ
- 566 名前:デフォルトの名無しさん [2023/06/25(日) 09:24:47.83 ID:RV4PZadR.net]
- SkiaSharp DrawingVisual あまり資料がないな〜
- 567 名前:デフォルトの名無しさん mailto:sage [2023/06/25(日) 12:00:19.37 ID:bsDOU/Dc.net]
- あまり情報がないものでも、ChatGPTが組み合わせて教えてくれる場合がある。
その場合、複数言語のページの内容を混ぜて回答してくれるのかな?
- 568 名前:デフォルトの名無しさん mailto:sage [2023/06/25(日) 16:20:15.73 ID:Avq8WYKk.net]
- DrawingVisualはWPFの機能でMSのサイトに解説とコードサンプルがあり、リファレンスがあるのだから資料がないということはないだろう
DrawingVisual オブジェクトの使用 - WPF .NET Framework | Microsoft Learn https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/graphics-multimedia/using-drawingvisual-objects
- 569 名前:デフォルトの名無しさん [2023/06/26(月) 20:38:37.00 ID:/ad+dyyW.net]
- https://swharden.com/csdv/skiasharp/skiasharp/
ベンチマーク 10万本で0.4secで驚異的。
- 570 名前:デフォルトの名無しさん [2023/06/26(月) 21:30:09.55 ID:/ad+dyyW.net]
- でもSkiaSharp + OpenGL はハードル高そうだな。
だったらSystem.Drawingの方がいいじゃん。
- 571 名前:デフォルトの名無しさん mailto:sage [2023/06/26(月) 22:37:30.04 ID:Jb1NpiVn.net]
- >>564の比較はWinFormsで
OpenGLで動かしたい場合はSKControlクラスの代わりにSKGLControlクラスを使うだけで良いみたい WPFの場合はSKElementクラスだけど、これの性能には触れてないな
- 572 名前:デフォルトの名無しさん mailto:sage [2023/06/26(月) 22:47:47.73 ID:Jb1NpiVn.net]
- 比較対象が多いページ見つけた
https://swharden.com/csdv/platforms/compare/
- 573 名前:デフォルトの名無しさん [2023/06/27(火) 19:40:57.53 ID:ZU8ILpLR.net]
- https://blog.emoji-gen.ninja/posts/20190204/skia.html
>日本語のドキュメントに至っては、ほぼ皆無です。そのため、Skia を使って本格的に開発する場合は、ある程度の覚悟が必要です。 なんだと!!ww ヤフー知恵袋も質問0 だった。。
- 574 名前:デフォルトの名無しさん [2023/06/27(火) 21:04:13.08 ID:ZU8ILpLR.net]
- 一応、線は引けるけど、非同期コードいれるとcanvasが壊れてるといって落ちる。
あと、XAMLで指定したメソッド以外でどうやって描画するのか不明。
- 575 名前:デフォルトの名無しさん mailto:sage [2023/06/28(水) 02:24:02.68 ID:HaY2f2W2.net]
- >>569
SKElementはメソッドやイベントが少なくて超シンプル https://learn.microsoft.com/en-us/dotnet/api/skiasharp.views.wpf.skelement?view=skiasharp-views-2.88 基本的に、SKElement.PaintSurfaceイベントで描画するだけ 再描画したい場合、InvalidateVisual()を実行すると上記イベントが発生する
- 576 名前:デフォルトの名無しさん [2023/06/28(水) 06:39:28.56 ID:+Blkfaog.net]
- じゃボタンを押したときに線を引かせたいときはそのボタンのイベントハンドラで
InvalidateVisual()実行させて線を引くコードはPaintSurface 内に記述するのか。 なんか面倒だし、PaintSurfaceが巨大化しそう。まぁPaintSurface内で自作関数呼べ ば良いんだろうけど。
- 577 名前:デフォルトの名無しさん mailto:sage [2023/06/28(水) 08:32:25.75 ID:ngy9I2lE.net]
- WM_PAINTでの経験が活かされますね
- 578 名前:デフォルトの名無しさん mailto:sage [2023/06/28(水) 09:38:16.64 ID:NAypQ388.net]
- 描画とかボタン処理は同じコンテクストで実行されるから
何も考えずに処理書けばいい タイマーや通信など他の契機で描画したいなら工夫がいるだけ
- 579 名前:デフォルトの名無しさん [2023/06/28(水) 14:41:27.72 ID:BVdlIcNn.net]
- 漠∞!!!!
列∞!!!!! 后∞!!!!!! 機∞!!!!!!! 枚∞!!!!!!!! 図∞!!!!!!!!! 寿∞!!!!!!!!!! 非∞!!!!!!!!!!! 駅∞!!!!!!!!!!!! 頓∞!!!!!!!!!!!!! 官∞!!!!!!!!!!!!!! 司∞!!!!!!!!!!!!!!! 戸∞!!!!!!!!!!!!!!!! 城∞!!!!!!!!!!!!!!!!! 堺∞!!!!!!!!!!!!!!!!!!
- 580 名前:デフォルトの名無しさん mailto:sage [2023/06/28(水) 19:47:18.96 ID:HaY2f2W2.net]
- >>573
PaintSurfaceイベント毎に(SKSurfaceクラスやSKCanvasクラスの)オブジェクトが変わるから(変わらないこともある) ボタンのクリックイベント等で描画するのは無理じゃないかな
- 581 名前:デフォルトの名無しさん [2023/06/28(水) 19:54:32.34 ID:+Blkfaog.net]
- 求めていたものやっと見つけた。中国サイト。
良くできてるな〜。 await Task.Delayではなく、 SpinWait.SpinUntil(() => false, 1000 / 60); //每秒60帧 だそうだ。こんなの知らんわ。 https://www.dongchuanmin.com/net/3188.html https://zhuanlan.zhihu.com/p/567618102
- 582 名前:デフォルトの名無しさん mailto:sage [2023/06/28(水) 20:35:15.51 ID:OvMs43YX.net]
- 中華リンク貼られても見ねーよ
- 583 名前:デフォルトの名無しさん mailto:sage [2023/06/28(水) 23:57:16.98 ID:i6K+M06u.net]
- 中国語、韓国語、ロシア語等、いろいろなページを見てるわ。
- 584 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 00:40:34.34 ID:Wk17Qk7t.net]
- DOBON.NET
Thread.SpinWaitメソッドはスレッドの同期のために
- 585 名前:熾狽ナ使用されているようですが、通常は私たちが使用する機会はないでしょう。 []
- [ここ壊れてます]
- 586 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 00:47:40.82 ID:puM++CKl.net]
- >>576
ビジーウェイト状態になりそうなコードだから試してみたけど、予想に反してCPU時間の消費がそんなでもないな ただ、環境によってループの頻度が違うみたいだ .NET7: 毎秒約500回 .NET Framework 4.7.2: 毎秒約1万回
- 587 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 01:11:48.23 ID:0ql7o6ud.net]
- Win32APIのInitializeCriticalSectionAndSpinCount()みたいな実装をするためのものか。
ほんのちょっと待てばロックを取得できる場合に数千回ループで待って、 できるだけスレッド切り替えにかかる無駄な時間を避ける。 InitializeCriticalSectionAndSpinCount 関数 (synchapi.h) - Win32 apps | Microsoft Learn https://learn.microsoft.com/ja-jp/windows/win32/api/synchapi/nf-synchapi-initializecriticalsectionandspincount
- 588 名前:デフォルトの名無しさん [2023/06/29(木) 06:25:02.66 ID:ejYRoEqU.net]
- >>578
他国でもソースは同じだもんな。
- 589 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 07:36:02.98 ID:G16HAkDq.net]
- 匿名掲示板に貼られた中華リンクのソースが必ず正しいと思ってるやつがいるのはおめでてーな
- 590 名前:デフォルトの名無しさん [2023/06/29(木) 10:00:47.73 ID:df8BmqTV.net]
- MSの翻訳は糞だから日本語のMS公式観るより
英語のMS公式観た方が良いのは事実
- 591 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 10:16:30.19 ID:e/2/rrz3.net]
- 匿名掲示板の中華リンクと公式の英語を同一視してるやつやべーな
- 592 名前:デフォルトの名無しさん [2023/06/29(木) 11:10:54.33 ID:df8BmqTV.net]
- そんなやついたか?
- 593 名前:デフォルトの名無しさん [2023/06/29(木) 11:44:14.93 ID:ejYRoEqU.net]
- 碌に読んでないの多いよな。
>中華リンクのソースが必ず正しいと思ってるやつがいる リンク張っただけなのにコレだもん。
- 594 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 11:56:50.12 ID:IrCo4C0s.net]
- ページ自体はまともでも、そこに貼られてる広告がヤバそう(偏見
- 595 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 11:59:03.18 ID:3KkF7hHh.net]
- 悔しそうで草
- 596 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 18:30:52.58 ID:puM++CKl.net]
- >>576
このコードでSpinWait.SpinUntil()で待機させるメリットって何だろう Dispatcher.Invoke()してるから1ループの実行時間は結構ばらつくし、Thread.Sleep()で十分な気がするのだけど 精度を出すなら、System.Timers.Timer使った方が良いし
- 597 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 18:58:35.73 ID:AdXw454n.net]
- 60フレームだそうとしてるのになんともいえん感じにはなる
- 598 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 20:40:19.95 ID:puM++CKl.net]
- >>590
Thread.Sleep()で十分な気がするって書いたけど、 実際に試すとSpinWait.SpinUntil()のままよりThread.Sleep()に置き換えた方が明らかにFPS向上するなw PCに負荷をかけたらまた違うのかねぇ
- 599 名前:デフォルトの名無しさん [2023/06/29(木) 21:07:27.01 ID:ejYRoEqU.net]
- await task.delay ()だと例外で落ちるから。
- 600 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 03:50:01.15 ID:G8RX/6Lm.net]
- >>593
InvalidateVisual()呼ぶだけならUIスレッドで実行されるように気を付ければawait Task.Delay()で問題無いよ。
- 601 名前:デフォルトの名無しさん [2023/06/30(金) 07:00:48.53 ID:ClIVzebM.net]
- よーし何か作ってみよう〜
- 602 名前:デフォルトの名無しさん [2023/06/30(金) 19:36:32.72 ID:ClIVzebM.net]
- ここ という所で1sec wait掛けたい。どうすんだ?
public MainWindow(){ Task.Run(() =>{ try{ while (true){ Dispatcher.Invoke(() => { canvas.InvalidateVisual(); }); _ = SpinWait.SpinUntil(() => false, 10); //每秒60帧 } } catch (Exception e){ } }); } void OnPaintSample(object sender, SKPaintSurfaceEventArgs e){ Render (e.Surface.Canvas ); } public void Render (SKCanvas canvas){ SKPaint thickLinePaint = new SKPaint{ Style = SKPaintStyle.Stroke, Color = SKColors.Orange, StrokeWidth = 1 }; for (int x=0;x<=600;x++){ canvas.DrawLine(x, 0, x,100, thickLinePaint); // ここ } }
- 603 名前:デフォルトの名無しさん [2023/06/30(金) 19:37:34.75 ID:ClIVzebM.net]
- 書き忘れ
skiasharp .netframework.
- 604 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 21:02:19.59 ID:k2cLJ2r8.net]
- フレームごとに呼ばれるシステムはフレームイベント内部でwaitさせるんじゃなくて
何フレーム目かとかの時間情報を持たせてその時間基準で全部描画するもの
- 605 名前:デフォルトの名無しさん [2023/06/30(金) 21:18:03.73 ID:ClIVzebM.net]
- へー。今まで(?)の手法とは違うんですね。
難しい〜。
- 606 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 21:40:58.12 ID:G8RX/6Lm.net]
- >>596
ここ という所での待機はNG。UIスレッドを掴んだままで描画されない。(イベントが終わったら描画される) https://ideone.com/vggwyV
- 607 名前:デフォルトの名無しさん [2023/06/30(金) 21:46:05.66 ID:ClIVzebM.net]
- ほう。ご丁寧にソースまで。ありがとう!!
- 608 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 21:51:04.15 ID:k2cLJ2r8.net]
- 実行環境違うだろうけどここ参考にしたら
https://learn.microsoft.com/ja-jp/xamarin/xamarin-forms/user-interface/graphics/skiasharp/basics/animation
- 609 名前:デフォルトの名無しさん [2023/07/02(日) 07:22:17.31 ID:NrLD8OfZ.net]
- https://ideone.com/SdsWsv
フラグが多くなりそうだな。
- 610 名前:デフォルトの名無しさん [2023/07/02(日) 07:28:34.32 ID:NrLD8OfZ.net]
- canvas.childlen.add()の場合はaddし過ぎる(500超えるとヤバい)と
酷いときは止まるけど skiasharpは描画を続けても平気なのかね。
- 611 名前:デフォルトの名無しさん [2023/07/05(水) 21:26:03.46 ID:iW/VMTsC.net]
- 心電図、SkinaSharp版を作って試したけどCPU使用率は canvas.chilren.add版が
24%、Skina版が2.5%、他の項目は殆ど差なしだった。 限度はあるだろうが、Skinaはcanvas.clearしなくても軽いな。
- 612 名前:デフォルトの名無しさん [2023/07/08(土) 06:53:37.52 ID:9pZJE7Lr.net]
- 画面遷移のやり方わかんなくて調べてるけど
MVVM使わない方法しか出てこないよ...😢
- 613 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 09:31:12.51 ID:rhn5/plT.net]
- どういう調べ方をしたんだ
メッセンジャーを使ったりサービスを使ったりすればいいだろ 今の主流はサービスかな
- 614 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 11:04:12.71 ID:gObB59CG.net]
- Template Studioという拡張機能をVSにインストールしてアプリの雛形を作ると画面遷移のコードまでジェネレートしてくれる
WinUI版しか使ったこと無いが、恐らくWPF版も同様と思われる
- 615 名前:デフォルトの名無しさん [2023/07/08(土) 15:06:36.80 ID:EY12ydBx.net]
- ホント、MVVMって手間ですね!
- 616 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 15:26:11.20 ID:p+sO9/0D.net]
- 画面遷移は遷移サービスに依頼
サービスは作られるときにGUIのフレームの参照をもらってる フレームをくれるのはメインウィンドウ(MetroWindow継承)のコードビハインド メインwindowsを作るのはホストサービス ホストサー・・・ 本当に意味不明だわ
- 617 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 15:42:14.13 ID:p+sO9/0D.net]
- サービス作る
VM作る 画面など作る だとサービス作る時に画面がないのでアウトだけど 先に画面作るのも気持ち悪いし画面でサービスを使わないと限らない 普通はどうしてるんだろ MVVM原理主義者たちは?
- 618 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 15:48:28.55 ID:Ug32iaVM.net]
- >>610
> サービスは作られるときにGUIのフレームの参照をもらってる サービス(モデル)がGUIのフレーム(ビュー)に依存してるって設計が悪んじゃないの
- 619 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 15:52:16.34 ID:p+sO9/0D.net]
- サービスはinterface越しで操作してたような気がするけどそもそもGUIに依存してもいいだろ
なんだか知らないことに口出しをするのもめんどくさいな
- 620 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 15:57:28.09 ID:L9qo6Y2h.net]
- GUIに依存するとデバッグが大変になるんだよ
- 621 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 16:09:37.95 ID:0FxLf7Ij.net]
- >サービスはinterface越しで操作してたような気がするけどそもそもGUIに依存してもいいだろ
それを直接依存させないのがMVVMやクリーンアーキテクチャの考え方。
- 622 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 17:01:16.26 ID:p+sO9/0D.net]
- 考えるだけ時間の無駄だけど自作クラスNaviService(INaviService継承)がコンストラクタでGUIフレームをもらってるとして
それの何がいけないのか デバッグやテスト用にはDummyNaviService(INaviService継承)を作るだけだろと思うが フレームをわざわざラップさせる意味は多分ない class NaviServiceに MyFrame _frame; bool GoBack() { return _frame.GoBack(); } とおいて自作MyFrameに更に同じようなものを書くのはただの無駄
- 623 名前:デフォルトの名無しさん [2023/07/09(日) 08:22:10.73 ID:F2jcE+HG.net]
- 凄いよな。
で、難解なMVVM駆使して何作ってんだ?
- 624 名前:デフォルトの名無しさん mailto:sage [2023/07/09(日) 09:18:14.11 ID:bY6lUE+2.net]
- 誤)難解なMVVM
正)お馬鹿なMVVM
- 625 名前:デフォルトの名無しさん [2023/07/09(日) 10:36:40.65 ID:F2jcE+HG.net]
- MVVMより、SkiaSharpなど2Dグラフィック系の勉強してる。MVVMは自分には無理や。。
- 626 名前:デフォルトの名無しさん [2023/07/09(日) 12:47:45.01 ID:/vDoZjEa.net]
- 一応WPFの思想はMVVMなんじゃないか
- 627 名前:デフォルトの名無しさん [2023/07/09(日) 15:57:12.07 ID:F2jcE+HG.net]
- それはない。MS自体、使い分けと言ってる。
- 628 名前:デフォルトの名無しさん mailto:sage [2023/07/09(日) 17:55:53.87 ID:dWXLeXtb.net]
- 別に同じ物を書いても目的が達成すればいいのでは?
DIはDIP規則をやるための機構だが、マルチインジェクションはISP原則から必須になる。 Microsoft.Extentionを使うとシェルもナビゲーションも簡単でマルチDIは簡単だが、PrismはViewModelLocatorがマルチインジェクションに対応していないのが残念だ。 ViewModeにこそマルチインジェクションが必要と思うのだか・・・ Prismでは、追加インジェクション関数をViewModelに入れている。 MVVM否定? 今時MVVM否定論なんて流行るのか?
|

|