C#, C♯, C#相談室 Part98 (518レス)
C#, C♯, C#相談室 Part98 http://mevius.5ch.net/test/read.cgi/tech/1719656321/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
334: デフォルトの名無しさん (ワッチョイ bfbc-6F/1) [sage] 2025/04/16(水) 05:53:28.46 ID:HaWtxdw70 イマイチ質問が把握できないがこういうことか? UIスレッドでTaskScheduler.FromCurrentSynchronizationContext();してTaskSchedulerを確保しておく UIスレッドで実行したいメソッドは上記TaskSchedulerを使ってStartするTaskとして実行する public Form1() { this.Button1.Click += ExecuteAsync; } async void ExecuteAsync(object? sender, EventArgs e) { var scheduler = TaskScheduler.FromCurrentSynchronizationContext(); await Task.Run(async () => { using var logger = new Logger("Task"); var task = Task.Factory.StartNew<Task>(() => SetTextAsync(), CancellationToken.None, CreationOptions.None, scheduler); await task; await task.Result; }); } async Task SetTextAsync() { await Task.Delay(1000); this.Text = DateTime.Now.ToString("HH:mm:ss"); } http://mevius.5ch.net/test/read.cgi/tech/1719656321/334
335: デフォルトの名無しさん (ワッチョイ bfbc-6F/1) [sage] 2025/04/16(水) 05:58:12.67 ID:HaWtxdw70 あ、TaskCreationOptionsのTaskが抜けてる… async Task SetTextAsync()の代わりにasync Task<string> GetTextAsync()だったら StartNew<Task<string>>にしてvar text = await task.Resultすればいい http://mevius.5ch.net/test/read.cgi/tech/1719656321/335
336: デフォルトの名無しさん (ワッチョイ 5f90-YkUp) [sage] 2025/04/16(水) 07:31:16.54 ID:QZV5gxIh0 ああ、ありがとうごいます それっぽいです 要はスレッドプールなどで実行されてるメソッドから 途中でダイアログなどを出してユーザのアクションの結果で更に処理を 進めるかキャンセルするかを決定したかったにです 同期コンテキストは調べたのですがこのPostなんたらじゃできないなと.. TaskSchedulerの方から攻めるのですね ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1719656321/336
337: デフォルトの名無しさん (ワッチョイ 5f90-YkUp) [sage] 2025/04/16(水) 07:41:21.34 ID:QZV5gxIh0 ボタンなど押して非同期メソッドを呼び出す この時、非同期メソッドには介入が必要な時に呼び出される非同期コールバックを渡せるようにする 呼び出し側で、非同期コールバックとして ダイアログなどをだしたりする ダイアログの表示などはUIスレッド実行したかった こんな感じでした http://mevius.5ch.net/test/read.cgi/tech/1719656321/337
338: デフォルトの名無しさん (ワッチョイ 27d7-kxmC) [sage] 2025/04/16(水) 15:31:47.59 ID:yzNZC+ym0 BOOL TestFunc(DWORD dwType, LPBYTE pBuffer, LPDWORD pcbBufSize); dwType:欲しいデータのタイプコード pBuffer:要求したデータを入れるバッファへのポインタ pcbBufSize:pBufferが指すバッファのサイズ 例えば↑のような関数をエクスポートしてるアンマネージDLLがあって DllImportする時のプロトタイプ宣言ってどう書いたらいいんでしょ? http://mevius.5ch.net/test/read.cgi/tech/1719656321/338
339: デフォルトの名無しさん (ワッチョイ 27d7-kxmC) [sage] 2025/04/16(水) 15:33:52.84 ID:yzNZC+ym0 LPDWORDはref uintでいいのかなと思うけど LPBYTEとか、それこそLPVOIDだのハンドル系受け取る引数なんかはどう宣言したものかよく解らなくて http://mevius.5ch.net/test/read.cgi/tech/1719656321/339
340: デフォルトの名無しさん (ワッチョイ bfbc-6F/1) [sage] 2025/04/16(水) 19:05:55.86 ID:HaWtxdw70 典型的にはこう bool TestFunc(uint dwType, byte[] pBuffer, out uint pcbBufSize); ref/outで宣言すると使いやすいけどNULLを渡せなくなるってのが問題になったりすることもある ケースバイケースなので一概には言えない ポインタが絡むなら誰がメモリ確保して誰がどうやって解放するのかを把握してないといけない場合もある http://mevius.5ch.net/test/read.cgi/tech/1719656321/340
341: デフォルトの名無しさん (オイコラミネオ MM0b-z3tz) [sage] 2025/04/16(水) 19:58:01.06 ID:VD2CYluqM 第三引数は普通はoutじゃないきがするけど http://mevius.5ch.net/test/read.cgi/tech/1719656321/341
342: デフォルトの名無しさん (ブーイモ MM8f-xKSY) [sage] 2025/04/16(水) 20:27:15.14 ID:qW3EbLcWM outだと呼び出し元からバッファサイズを渡せないな http://mevius.5ch.net/test/read.cgi/tech/1719656321/342
343: デフォルトの名無しさん (ワッチョイ 7f10-z3tz) [sage] 2025/04/16(水) 20:47:35.76 ID:JiAmFx7+0 refじゃあかんの? http://mevius.5ch.net/test/read.cgi/tech/1719656321/343
344: デフォルトの名無しさん (ワッチョイ 27d7-kxmC) [sage] 2025/04/16(水) 20:48:46.57 ID:yzNZC+ym0 >>340 おぉ、ありがとう ちょっとそれ元に弄ってみるます http://mevius.5ch.net/test/read.cgi/tech/1719656321/344
345: デフォルトの名無しさん (ワッチョイ ed96-VXNn) [] 2025/04/20(日) 10:42:31.48 ID:T4EZ0xEH0 refとかout使うと機械語的にはゴミラッパーが生成される ついでにboolも実はネイティブ型ではないので同様にゴミが生成される 多少可読性や安全性を犠牲にして良いなら int TestFunc(uint dwType, byte* pBuffer, uint* pcbBufSize)とすればC/C++と遜色ない機械語になる 戻り値はintなので != 0としてbool判定をする手間がかかるけどね ついでに.NETCore系統で且つ内部でIOなどを行わずに計算量が少なく割とすぐ戻る事が確定している場合は[DllImport("native.dll"), SuppressGCTransition]とすると尚良し http://mevius.5ch.net/test/read.cgi/tech/1719656321/345
346: デフォルトの名無しさん (ワッチョイ ed96-VXNn) [] 2025/04/20(日) 10:47:34.35 ID:T4EZ0xEH0 もしネイティブ側の戻り値がBOOLではなくboolならC#側はbyteにすればいい boolって実は結構罠だからな http://mevius.5ch.net/test/read.cgi/tech/1719656321/346
347: デフォルトの名無しさん (ワッチョイ 4954-EnZh) [sage] 2025/04/21(月) 11:37:03.90 ID:ed9AfVbw0 CharGPTの回答 WinAPI型名 意味 C# 対応型 備考・使い方例 BYTE 8ビット符号なし整数 byte 0〜255 WORD 16ビット符号なし整数 ushort 0〜65535 DWORD 32ビット符号なし整数 uint よく使われる LONG 32ビット符号付き整数 int 一部APIでは戻り値で使用 ULONG 32ビット符号なし整数 uint DWORDと同義扱いされることあり BOOL 論理値(実際はint型) bool または int C#では [MarshalAs(UnmanagedType.Bool)] を使うと便利 LPSTR ANSI文字列へのポインタ string (MarshalAs(UnmanagedType.LPStr)) LPCWSTR Unicode文字列定数へのポインタ string (MarshalAs(UnmanagedType.LPWStr)) 通常はこれを使う LPBYTE BYTEへのポインタ IntPtr / byte[] / byte* C#で配列やポインタとして使う LPDWORD DWORDへのポインタ ref uint / out uint / IntPtr APIによって使い分け HANDLE 汎用ハンドル IntPtr ハンドルは全部 IntPtr PVOID/LPVOID 任意のポインタ IntPtr Voidポインタの表現 CHAR 1バイト文字 byte(ANSI)/ char(Unicode) ANSI文字列なら byte TCHAR Unicode/ANSI切り替え可能文字型 char または string Unicode前提なら char/string http://mevius.5ch.net/test/read.cgi/tech/1719656321/347
348: デフォルトの名無しさん (ワッチョイ 6610-h0BB) [sage] 2025/04/21(月) 14:43:06.51 ID:AUqiwuPT0 何のためのVOIDポインタかで変わるしIntPtrで良いもんでもないわ まぁなんだ、CharGPTなんて言うアホは黙っとけw http://mevius.5ch.net/test/read.cgi/tech/1719656321/348
349: デフォルトの名無しさん (ワッチョイ a6ce-i6bQ) [] 2025/04/22(火) 19:34:21.37 ID:rMo0RJWh0 Copilot「僕の出番ですね!」 http://mevius.5ch.net/test/read.cgi/tech/1719656321/349
350: デフォルトの名無しさん (ワッチョイ 79d7-vVAN) [sage] 2025/04/23(水) 08:49:37.84 ID:eLYGqJZZ0 去ね http://mevius.5ch.net/test/read.cgi/tech/1719656321/350
351: デフォルトの名無しさん (スフッ Sd0a-NF34) [] 2025/04/23(水) 12:17:26.63 ID:snQ3Sxp8d wchar : 「神は我を見放したのか」 http://mevius.5ch.net/test/read.cgi/tech/1719656321/351
352: デフォルトの名無しさん (オイコラミネオ MM71-h0BB) [sage] 2025/04/23(水) 20:01:13.83 ID:WPvg2tW3M >>347 ChatGPTはc#弱いな http://mevius.5ch.net/test/read.cgi/tech/1719656321/352
353: 警備員[Lv.1][新芽] (ワッチョイ a69e-kvZ8) [sage] 2025/04/24(木) 01:47:59.03 ID:MPcZRdS90 >>345 最近のC#はMIL(IL?)でなくマシン語を直接()生成するようになったのですか http://mevius.5ch.net/test/read.cgi/tech/1719656321/353
354: デフォルトの名無しさん (ワッチョイ f978-fvra) [] 2025/04/24(木) 21:13:01.92 ID:985jarF60 >>353 最近は native AOT といってそういうことができる リフレクションが使えないなど制限もあるけど 元のレス先の345は、たぶん native AOT とか関係なく、中間言語が生成するコードも指して機械語と言ってると思う http://mevius.5ch.net/test/read.cgi/tech/1719656321/354
355: 警備員[Lv.3][新芽] (ワッチョイ 65eb-kvZ8) [sage] 2025/04/24(木) 21:27:22.97 ID:WNuC4TAo0 >>354 なるほど、ありがとうございました!! http://mevius.5ch.net/test/read.cgi/tech/1719656321/355
356: デフォルトの名無しさん (ワッチョイ ed96-VXNn) [] 2025/04/25(金) 11:23:25.63 ID:reKQm/Xa0 >>354 ILの話はしてない nativeAOT及びJITが最終的に生成するアセンブラを指して言ってる パフォーマンス目的でC/C++と連携しようとすると返ってパフォーマンス落ちる事も多いからな 機械生成のゴミラッパーが挟まると呼び出しコストがdll内部のルーチンより1万倍掛かるとかザラにあるし http://mevius.5ch.net/test/read.cgi/tech/1719656321/356
357: デフォルトの名無しさん (ワッチョイ 79d7-vVAN) [sage] 2025/04/25(金) 12:53:18.17 ID:RL99gkZ90 まぁ、アンマネージ呼び出しをパフォーマンス目的でやるもんじゃないしな http://mevius.5ch.net/test/read.cgi/tech/1719656321/357
358: デフォルトの名無しさん (ワッチョイ 3778-8SS3) [sage] 2025/04/27(日) 16:38:33.85 ID:jnYDAPp70 LibraryImport属性を使うとDllImport属性より最適化されたコードが出力されたりするの? http://mevius.5ch.net/test/read.cgi/tech/1719656321/358
359: デフォルトの名無しさん (ワッチョイ 7761-tU9d) [] 2025/05/03(土) 12:39:00.86 ID:GwMmJ/YG0 オリジナルのDataGridViewの列を作りたいんですが、デザインビューのDataGridViewからオリジナルの列を追加する方法ってありますか? http://mevius.5ch.net/test/read.cgi/tech/1719656321/359
360: デフォルトの名無しさん (ワッチョイ d7d7-U1DS) [sage] 2025/05/03(土) 14:19:24.20 ID:ZbkD0HOB0 >>359 オーナードローしたいという事? http://mevius.5ch.net/test/read.cgi/tech/1719656321/360
361: デフォルトの名無しさん (オイコラミネオ MM5b-5rsl) [sage] 2025/05/03(土) 14:43:58.59 ID:rfaECn6+M 列A 列Bがあって 列C作ってA+Bを表示したいと言うことでは? http://mevius.5ch.net/test/read.cgi/tech/1719656321/361
362: デフォルトの名無しさん (ワッチョイ 7761-tU9d) [] 2025/05/03(土) 15:51:35.38 ID:GwMmJ/YG0 DataGridViewColumnを派生させたオリジナルの列をフォームデザインビューから列に追加したいんです http://mevius.5ch.net/test/read.cgi/tech/1719656321/362
363: デフォルトの名無しさん (ワッチョイ 9f79-q4+Y) [] 2025/05/03(土) 16:55:23.30 ID:h9Jrb8E+0 lこの辺りを駆使してDataGridViewColumnクラスを作るとか https://dobon.net/vb/dotnet/graphics/drawcontrols.html http://mevius.5ch.net/test/read.cgi/tech/1719656321/363
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 155 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.006s