[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/23 02:37 / Filesize : 278 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part148



1 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:28:41.27 ID:Pggemlyq0.net]
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part147
mevius.5ch.net/test/read.cgi/tech/1582100741/
■関連スレ
C#, C♯, C#相談室 Part94
mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

230 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 17:57:59.23 ID:E5+XpSzKd.net]
整形はvsのデフォルトに任せるようにした
独自整形ルール作ってるプロジェクトに入るとめんどくせって思うようになってしまった

231 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 18:15:37.32 ID:8AkvqbAqa.net]
同じ構文木なら表示形式はなんでもいいはずだ
保存時の形式だけ標準化して、編集時はユーザーの好みに合わせてフォーマットするようにIDEが進化すべき

232 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 18:23:48.50 ID:dl6F83GvM.net]
簡単な住所録作ろうとしてます。
登録と削除と追加ができればいいだけのやつ。データ保存はデータベース側に。
これのシンプルなオープンソースプロジェクト知っている方いませんか?いたら嬉しい。

233 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 18:48:40.23 ID:Yannm6rz0.net]
>>229
オープンソースプロジェクトの何を探してんの?
データベース?

234 名前:デフォルトの名無しさん (ワッチョイ 4dde-akQC) mailto:sage [2020/08/01(土) 19:19:48 ID:1LAdFvqL0.net]
>>230
住所録って書いてんじゃんメクラかよ

235 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 19:31:35.20 ID:Yannm6rz0.net]
>>231
作るのにオープンソースプロジェクトが必要なの?
って言ってるんだけど。
作るんじゃなくて流用する、の間違いなら、ああ、って思うけどさ。

236 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 19:43:37.72 ID:EiwM5rD/0.net]
まあ、そのまんま使えねーだろーから改修して使おうってんじゃねーの?
オープンソースの正しい使い方やん

237 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 20:12:27.90 ID:Yannm6rz0.net]
簡単な登録と削除ができるだけでいい住所録にそんなものが必要だとは思わんというか、
何かをカスタマイズしてその程度の住所録にするのは、ちょっとたいそうな気がする。

238 名前:デフォルトの名無しさん (ワッチョイ 7a6a-xE3T) [2020/08/01(土) 20:49:12 ID:oCALSNxU0.net]
エスパーすると作りたいけど右も左も分からんからお手本が欲しいってことかな



239 名前:デフォルトの名無しさん (ワッチョイ b178-xE3T) mailto:sage [2020/08/01(土) 20:51:54 ID:xhSYh2050.net]
>>229
https://www.google.com/search?q=c%23 Address book

240 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 21:48:16.20 ID:NKcPOHZ30.net]
オープンソースってちょいっと触るには佇まいがでかすぎて流用には向かないことが多い
住所録のどこの部分の機能が必要か知らんけど
単にアドレス帳の登録、削除、編集の基本機能だけだったら1〜2日の内容だから
どっか入門サイトで似たようなの見つけて実装したほうが早いと思う

241 名前:デフォルトの名無しさん [2020/08/01(土) 21:52:38.29 ID:+9Q20FKV0.net]
スレ違いだったら申し訳ないです。
C言語をやろうととりあえずmacかったのですが、
どのソフトで開発環境作ったらいいでしょうか?

242 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 21:54:22.30 ID:G+VYcIGl0.net]
>>238
ここCじゃなくてC#な

243 名前:デフォルトの名無しさん mailto:sage [2020/08/01(土) 22:04:49.38 ID:8QGIO3XO0.net]
>>238
もう一つ言っておくと、mac はobjective c
(c++)でないと
画面作れないよ

244 名前:蟻人間 mailto:sage [2020/08/01(土) 22:06:32.74 ID:LLVAByzud.net]
macは自由陣営じゃないから。。。

245 名前:デフォルトの名無しさん [2020/08/01(土) 22:11:32.98 ID:+9Q20FKV0.net]
わかりました
ありがとうございます

246 名前:デフォルトの名無しさん mailto:sage [2020/08/02(日) 06:10:11.27 ID:T2MIboAU0.net]
c#で作ったbotからandoroidスマホに通知を送る良い方法はありませんか?
履歴を確認できる方法で。
今まではline-notifyでlineに送っていたのですが、新しいルート証明書をインストールしなくてはならなくなって別の方法を探しています。

247 名前:デフォルトの名無しさん mailto:sage [2020/08/02(日) 07:27:09.21 ID:EizALxAu0.net]
>>243
相手が端末の電源オフのときはどうしたいの?
サーバーの特定のデータを見に行く作りにしないと結局使えないじゃんってなることのが多かったよ

248 名前:デフォルトの名無しさん [2020/08/02(日) 12:52:22.51 ID:scrCUlqp0.net]
データクラスって一時期C#にも付くんじゃないかって言われてたのに、一体どうなったの?
https://try.kotlinlang.org/#/Kotlin%20Koans/Introduction/Data%20classes/Task.kt
オートプロパティのおかげでJavaみたくはならないから要らないってこと?



249 名前:デフォルトの名無しさん mailto:sage [2020/08/02(日) 13:54:59.45 ID:xaz7GC4v0.net]
9でrecordくるよ

250 名前:デフォルトの名無しさん mailto:sage [2020/08/02(日) 14:51:37.50 ID:umITGI3r0.net]
https://ufcpp.net/blog/2020/6/record0609/
https://ufcpp.net/blog/2020/6/cs9vs16_7p3/
recordsはこんな感じ

251 名前:デフォルトの名無しさん [2020/08/02(日) 16:20:00.33 ID:NsDY9jGSF.net]
ここはプログラムを描きたい人造りたい人向けのスレ
フリーソフトダウンロードして使いたい人は相応のスレへ逝くことをお薦めします

252 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 22:01:35.41 ID:RMVHFRAl0.net]
public interface Ixxxxx
{
 int method1(int x);
}

インターフェイスについて質問です。
上ではメソッドの型を定義しているわけですが、
インターフェースの引数定義で、xのように変数を設定するのはどうしてなんでしょうか。
ここでは使われない変数なので、型のみで良いと思うのですが。

それから、publicを省略して、interfaceとだけ定義する理由はどうしてなのでしょうか。
classなら、publicを前置するのに。

253 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 22:10:50.18 ID:RMVHFRAl0.net]
ルート相対的URLを保存するクラスは何が適しているんでしょうか。

String型に、/root/abc/def を文字列として保存しているのですが、
適切な型があれば教えてください。

254 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 23:38:56.88 ID:FEiIVBqsM.net]
>>249
名前がないと何を意味する引数なのかが意味不明だから
interfaceはpublicメンバしか持てないから

255 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 00:15:18.15 ID:yQcUkcYq0.net]
引数名ないとドキュメント化する時にも困るしね

256 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 11:28:01.48 ID:M8Oq5rfA0.net]
>>249
引数や戻り値の型をしっかり定義しないといけない理由は、ILやアセンブリといった低レベル知識を学習すればよく分かるよ
機械語レベルだとint、long、float、double〜etcはそれぞれ命令文が違う
だから引数や戻り値がバラバラな値型だとそれぞれの機械語を生成しなきゃならず共用化出来ない

逆に言うと参照型であればポインタだけで済むので実は共用化が出来る
なので参照型であればobjectとして定義をすれば実際に共用化可能(値型もboxingしてobject型にすれば同様)

257 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 11:39:06.89 ID:krKESdlN0.net]
型のみで十分なのになん変数名まで書かなきゃならんの?って質問にその回答は適切ですか?

258 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 12:06:19.79 ID:yQcUkcYq0.net]
>>253
その回答はズレてる



259 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 12:46:23.59 ID:YyY7xdI50.net]
>>251
>>252
レスありがとうございます。
なるほど、
変数名に引数の役割について記録しておくということにとても納得しました。
ソースの自己ドキュメント化につながりますものね。

>>253-255
レスありがとうございます。(^-^)

260 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 13:31:45.96 ID:Cdgw0eXGM.net]
インターフェイスメンバに引数名が必要なのは名前付き引数のためでもある
名前付き引数ってのはmethod1(x:123)みたいな書き方のこと
正確には名前付き引数がC#に導入されたのは比較的最近なので時系列が逆なんだけど、
.NETはC#に限らずいろんな言語を動かすことを想定して設計されてるので名前付き引数のための要請についても元々考慮されてたというわけ

261 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 14:23:19.04 ID:Utz5OTUqa.net]
>>257
下のコードは合法なのでさすがにそれは意味不明
interface IHoge
{
  void Fuga(int x);
}

class Hoge : IHoge
{
  public void Fuga(int y)
  {
  }
}

262 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 14:29:57.19 ID:G2vvVEFn0.net]
引数名を変更するのってどういったケースを想定してるん?

263 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 14:34:15.41 ID:Utz5OTUqa.net]
別に想定なんかしてないのでは?
単に違法にする理由がないだけかと

264 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 17:36:23.03 ID:nh9T8LFU0.net]
>>258
IHoge hoge = new Hoge();
hoge.Fuga(x: 100); //<= OK
hoge.Fuga(y: 100); //<= NG: compile error

265 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 18:29:28.50 ID:Utz5OTUqa.net]
>>261
当たり前やんw

266 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 19:19:04.36 ID:Utz5OTUqa.net]
あーインターフェイスのメソッドの仮引数が名無し定義を許す仕様になってたら
名前付きで呼び出せないよって言いたいわけか
確かにその通りだね。

だけど「名無し定義を許さない理由の一つは名前付き引数を想定していたから」は考えすぎじゃないのかな

267 名前:デフォルトの名無しさん (テテンテンテン MM8f-wKT+) mailto:sage [2020/09/04(金) 19:51:37 ID:Cdgw0eXGM.net]
いや名前付き引数はVB.NETには昔からあったぞ
想定していないわけがない

268 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 20:31:43.96 ID:nqNO8CQ40.net]
そもそもコンパイルしても変数名はILに残るわけだし
C#1からたぶんそうだよね?reflectionあるんだし



269 名前:デフォルトの名無しさん (アウアウウー Sa8b-wKT+) mailto:sage [2020/09/05(土) 10:58:29 ID:JiWof8twa.net]
>>265
それはもちろんその通りで、名前付き引数も当然そのメタ情報を見るわけだけど、
MSが仮に明確な意思をもってインターフェイスメンバに引数名は絶対要らないという設計判断をしたならCLIもインターフェイスメンバには例外的に引数名を持てない仕様にしただろう
CLIの設計としてはわざわざそんな例外を設けるのは不自然だし、C#の言語仕様を考えてもインターフェイスメンバだけ例外的にメソッド宣言の文法が違うのは不自然だ
もちろん、実装には追加コストを払って特別なケアが必要になるだろう
そこまでして引数名を省略したいだろうか?ということだね

270 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 12:34:52.95 ID:Waja5Z+Na.net]
実行時に小さくないコストが発生するような方法なんて取るわけないと思うよw
メタ情報なんて見てるわけないじゃんwww

271 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 13:22:53.11 ID:azagYl6mp.net]
家政婦はメタ

272 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 13:51:42.86 ID:6OTXYwA0M.net]
>>267
誰が実行時に見てるなんて言ったんだ?
見てるのはコンパイル時

273 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:12:24.58 ID:RVsSclOOM.net]
2日連続して秒で論破されとるやつw

274 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 16:47:07.35 ID:aivXeFh8d.net]
>>270
スレタイの通り初心者なんやろ

275 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 18:29:01.06 ID:Waja5Z+Na.net]
>>266は誤読したけど前日に論破(笑)なんかされた覚えはないよw

言い訳をさせてもらえばそもそも>>265-266は話の意図が不明瞭。
どっからそんな話が出てくる

276 名前:のって話 []
[ここ壊れてます]

277 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 22:38:11.37 ID:VnlHSptc0.net]
インターフェースの引数名を省略する戦略なんかないって結論出てるのにね

278 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 08:18:43.19 ID:gGwX7R3F0.net]
>>273
そこの理由が示されていないんでは?
名前付き引数を使えるようにしたんで仮引数は省略できません、じゃ理由になってないでしょ?



279 名前:デフォルトの名無しさん [2020/09/06(日) 14:33:55.32 ID:pKWvrGW4F.net]
省略するとき
hoge(hage,,,,,fuga,,,,kuzu,,,) みたいな言語あったなー

280 名前:デフォルトの名無しさん [2020/09/07(月) 02:57:30.38 ID:u0REhpNo0.net]
using var task = Task.Run(() => Do(a, b, c));

このDoを途中で止めることできる?
Doの処理に時間がかかるためキャンセルさせたい場合がある

281 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 03:10:56.80 ID:3uGG3SyO0.net]
CancellationTokenを使う
https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-cancel-a-task-and-its-children

282 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 03:25:16.17 ID:jjIciKyq0.net]
Doがキャンセルできるように作られてればできる
そうでなければ無理

283 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 09:29:51.53 ID:s6/MEWpq0.net]
a,b,cってなによ?

284 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 10:42:48.10 ID:Mci5uexUM.net]
引数じゃないの?

285 名前:デフォルトの名無しさん [2020/09/07(月) 16:30:38.13 ID:u0REhpNo0.net]
Doの改造も不可避みたいですね
ありがとうございました

286 名前:デフォルトの名無しさん mailto:sage [2020/09/08(火) 11:07:55.61 ID:zCzZAqaJv]
C#歴1ヶ月の独学勉強中の者です。
pictureBoxに画像を表示させており、
ボタンを押下するとその画像が画像中心を支点に5度ずつ
反時計回りに回転するプログラムを作成しています。
環境:VScommunity2019

この際pictureBoxに表示させている画像が表示されたまま
その上に回転した画像も表示されてしまいます。
元の画像を表示させないようにしたいのですが、
対応案が浮かびません。。ご教示いただけないでしょうか。

287 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 09:13:51.86 ID:rDZLwTxXa.net]
VisualC#2019パーフェクトマスター

買ってみた
800ページ近くある
勉強しなおし

Java有償化で、いろいろ特需だな

Javaよサラバ

Javaよサラバ

Why なぜに生きているのか

わからない

288 名前:デフォルトの名無しさん [2020/09/11(金) 10:05:52.91 ID:qxFjIo0zM.net]
Java有償本当か?



289 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 16:12:44.77 ID:rDZLwTxXa.net]
優勝だ

290 名前:デフォルトの名無しさん [2020/09/23(水) 09:34:34.80 ID:hJkRvCZvF.net]
>>1
Part 149

291 名前:デフォルトの名無しさん mailto:sage [2020/09/23(水) 19:49:30.91 ID:SeN5l4G8a.net]
需要ないと思うけど暇だったので別スレで質問が出てたキー操作のシーケンスで発動する
キーボドショートカットを作ってみた
https://ideone.com/FcOn5C

使い方:
public partial class Form1 : Form
{
  private KeyboardShortcutsDetector mKbsDetector = new KeyboardShortcutsDetector();
  public Form1()
  {
    InitializeComponent();
    mKbsDetector.AddKeyBinding(Keys.Control | Keys.K, Keys.Control | Keys.L, () => Console.WriteLine("Ctrl + K, L"));
    mKbsDetector.AddKeyBinding(Keys.Control | Keys.K, Keys.Control | Keys.M, () => Console.WriteLine("Ctrl + K, M"));
    mKbsDetector.AddKeyBinding(Keys.Control | Keys.J, Keys.Control | Keys.U, () => Console.WriteLine("Ctrl + J, U"));
  }

  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
  {
    return mKbsDetector.ProcessKey(keyData) ? true : base.ProcessCmdKey(ref msg, keyData);
  }
}
退屈なコードだからたぶん見るだけ時間の無駄だと思うw

292 名前:デフォルトの名無しさん mailto:sage [2020/09/24(木) 00:24:56.04 ID:GbsAQP4b0.net]
MVCとかまだイマイチわからんからwinformで作ってからMVCに移行する感じで勉強してるけど一人開発だと有り難み感じないからちょっと空しい

293 名前:デフォルトの名無しさん [2020/09/24(木) 12:42:20.92 ID:gbWGo5W3M.net]
ボタン押したあとに結果リストにフォーカス移動させるのは
viewでやってええのか?

294 名前:デフォルトの名無しさん mailto:sage [2020/09/24(木) 16:36:22.54 ID:e+Ck+96a0.net]
いいと思うよ

295 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 17:13:06.01 ID:xSRIB2Tf0.net]
windowsフォームアプリでHttpClientを使ってhtmlを取得しようと思っていますがうまくいきません。ステップ実行すると※の部分で処理が終わってしまいます。エラーに関する表示が何もでないため行き詰まってます。非同期処理に関する理解が浅いからだと思っていますが、壁を乗り越えられません。
このようなコードではなぜうまくいかないのでしょうか?

@
private void button1_Click(object sender, EventArgs e)
{
 var url = "www.google.com";
 var t = GetHtml(url);
 t.Wait();
 this.textBox1.Text = t.Result;
}
async Task<string> GetHtml(string url)
{
 var client = new HttpClient();
 var html = await client.GetStringAsync(url);//←※
 return html;
}

(続く)

296 名前:デフォルトの名無しさん [2020/09/26(土) 17:13:28.26 ID:xSRIB2Tf0.net]
>>291の続き


ためしにコンソールアプリで似たコードを書いてみましたがうまくいきます。
A
static void Main(string[] args)
{
 var url = "www.google.com";
 var t = GetHtml(url);
 t.Wait();
 Console.WriteLine(t.Result);
}
static async Task<string> GetHtml(string url)
{
 var client = new HttpClient();
 var html = await client.GetStringAsync(url);
 return html;
}

フォームアプリでもハンドラに全て突っ込めばうまくいきます。
B
private async void button1_Click(object sender, EventArgs e)
{
 var url = "www.google.com";
 var client = new HttpClient();
 var html = await client.GetStringAsync(url);
 this.textBox1.Text = html;
}

297 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 17:23:29.59 ID:RSACZQL60.net]
>>291
private async void button1_Click( object sender, EventArgs e )
{
var url = "www.google.com";
this.textBox1.Text = await GetHtml( url );
}

298 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 17:27:53.86 ID:9d7CJAWD0.net]
asyncはwaitしちゃだめ
理由は async デッドロック あたりでググって



299 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 17:31:36.79 ID:+0bWtyAMM.net]
>>291
どうしてもWait()使う場合はConfigureAwait(false)するかな

300 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 17:36:48.45 ID:xSRIB2Tf0.net]
>>293,294,295
数日間悩んでたのですが、教えて下さったキーワードを手がかりに調べ直してみます
本当に助かりました。ありがとうございます。

301 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 04:46:18.27 ID:6sIZ9RBB0.net]
Android, Electron などは、スレッドが2つある。
UI(描画)スレッドと、サーバー(バックグラウンド)スレッド

だから、2つのコンテキスト・文脈をまたがって、非同期などはできない。
異なる文脈の処理を呼び出すには、文脈を切り替えるような、特別な書き方がある

まあ、Windows のGUIアプリが、2つの文脈でやっているかどうかは知らないけど

302 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 07:46:38.96 ID:WpoxB1nK0.net]
>>297
知らんのかよ。
やってるけど。

303 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 16:39:54.69 ID:BMd/NSoW0.net]
>>291
多分非同期処理って調べるとasyncの例ばかりで自分で戻り制御する方法がよく
分からなくてTaskクラスでWaitすれば出来るとかって結論に達したんでないかと
思うのだけど・・・

まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして
起動して処理を元のスレッド(この場合STAスレッド)に戻します
asyncメソッドの中でawaitを指定すると、メソッドの内容に関係なく元のスレッドに
戻るのは変わらないですが、asyncメソッドの中でawaitで指定されたメソッドが
終了するまでasyncメソッドのスレッドだけが待ち状態になり、awaitから返って
くるとawait以降を実行しasyncメソッドの最後まで行くとasyncメソッドのスレッド
だけが終了されます

検証してないので予想なのですが、Taskクラスで管理するスレッドを起動して
いない(Task.Run)状態でWaitをかけるとSTAスレッドを待つためにsleepして
しまいますがSTAスレッドはループスレッドなので当然いつまで待っても終了
しません
asyncスレッドではawaitの処理が終わって復帰しようとしても元になるSTA
スレッドがsleep状態なので、こちらもawaitから返ってこないみたいなことが
起こっているのだと思います

2のコンソールアプリの場合にはループスレッドではないのでMainの処理が
終了した時点で続きが動くのではないかと

3は正しい使い方で、STAスレッドは動かしたままbutton1_Clickメソッドが別スレッドで
動作する際にclient.GetStringAsyncの処理を待っているので普通に動作します

button1_Clickの中で待つのであればasyncメソッドを作る意味がないですし、async
メソッドで裏で動かすのであればbutton1_Clickで待ってはいけないので3の様な
形で実装するか、asyncメソッドの返却値をただのstringにして、textBox1.Textに
メソッドの返却値が入る形式に変える(こっちは試してないので嘘かも)のが正解じゃ
ないかな

304 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 18:04:42.91 ID:co99WLAO0.net]
つまり非同期すればハゲるということですね。

305 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 19:27:47.55 ID:0F2CG6otd.net]
>>291
@でやるなら自分はcontinuewithするかなあ
あとhttpclientは毎回使い回すのはあまり良くなかった気がする

306 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 19:28:51.84 ID:0F2CG6otd.net]
>>301
x使い回す
○作り直す

307 名前:296 mailto:sage [2020/09/28(月) 02:24:40.60 ID:QIpyCS2B0.net]
JavaScript が難しいのは、非同期が基本だから。
コンテキスト・文脈が異なる。
時間の進み方が異なる世界で、同期を取らないといけないから

Ruby が簡単なのは、同期が基本だから。
非同期の方がオプション

Android, Electron がややこしいのも、2つの文脈の同期を取る必要があるから。
1つのアプリ内に、GUI・非GUI の文脈がある

例えば、Electronなら、Main は、Node.js のCUI スレッドで、
Renderer は、GUI のChromium スレッド

双方は、決められた書き方をしないと、同期・通信できない

308 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 06:18:20.07 ID:ii9XSMYC0.net]
>>291です
>>297
コンテキスト・文脈という概念がまだ把握できてないのでそこが課題だと思ってます
>>299
自分は独習C#という本をテキストにして勉強しています。
その中で、>>292のAと似たコードが記載されていて、
これを使ってasync/awaitの基礎が説明されています。
そこで、フォームアプリで真似してみたんです。
デッドロックについてはいろいろ調べてみて基本的な理屈は理解できました。
ただ、Aのコンソールアプリでデッドロックが起きない理由がわかりません。
コンソールアプリはループスレッドではないからとのご指摘が重要だと思っていますが
まだ理解が浅くてモヤモヤしてます。
あと、
>まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして
起動して・・・
の下りですが、スレッドが3つあると考えればいいのでしょうか?
a.STAスレッド(2のスレッドを呼び出したスレッド)
b.async指定されたメソッドを処理するスレッド
c.client.GetStringAsync(url)を処理するスレッド

これはAのコンソールアプリでも同じですか?
bについては独習C#には書かれていなかったので
aとbは同じスレッドだと思い込んでいました。

調べてみてよく分かったのですが、理解できていない概念が多すぎますね。
今の時点で安易に触ってしまうと変に誤った先入観を持ってしまいそうです
この辺をわかりやすくしっかり説明している書籍等、ご存じないでしょうか?

結論としては
基本的にフォームアプリの中でWaitを使うな
使いたいならConfigureAwait(false)で回避しろ
ということなのかなと思っています



309 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 07:01:50.95 ID:ii9XSMYC0.net]
>>304
修正
a.STAスレッド(bのスレッドを呼び出したスレッド)

310 名前:デフォルトの名無しさん mailto:age [2020/09/28(月) 07:59:26.50 ID:nO4ceNb30.net]
すいません入門書に以下のコードがあるんですが実行してもピクチャーが真っ白で変になってるんですが
何が間違ってるんでしょうか;
https://gyazo.com/de388825132a1ac42b21b7cbb8a069fd

画像を置いてる場所はここです
https://gyazo.com/93530ea51ef1e88cbcd097846d409ca4

311 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 08:35:58.50 ID:lkQsRi/q0.net]
表示したい画像はどんな内容なんですか?

312 名前:296 mailto:sage [2020/09/28(月) 08:52:18.25 ID:QIpyCS2B0.net]
>>304
コンテキスト・文脈が異なるとは、全く別世界・異次元。
時間の進み方も異なるし、全く感知できない。
通信・同期もできない

未定義の動作と同じ。
あらゆる仮定・推測ができない

だから、双方が連絡するには、特別な書き方をしないといけない

普通の言語では、例外も補足できない。
他方で例外を投げても、伝わらない

だから、ストールするのは、文脈が異なる場所で、例外が起こっている可能性もある。


313 名前:起こっていても分からないから

本を買うよりも、検索して調べた方がよい。
こういう説明が載ってる本は、まずない。
余程、マニアックな本だけだろう
[]
[ここ壊れてます]

314 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 08:53:38.64 ID:phqY8Xtx0.net]
FormのControlsに追加しなくてもいいんだっけ?

315 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 08:59:13.21 ID:Zg0P7tB00.net]
>>304
C#による マルチコアのための非同期/並列処理プログラミング
ttps://gihyo.jp/book/2013/978-4-7741-5828-0

C#によるWindowsシステムプログラミング 第2版
ttp://www.cutt.co.jp/book/978-4-87783-468-5.html

この2冊しかしらん
もっといいのを知ってる人いたらよろしく

316 名前:296 mailto:sage [2020/09/28(月) 09:04:53.56 ID:QIpyCS2B0.net]
確かに、GUI の根幹には、永久のイベント(メッセージ)ループがある。
イベントドリブン

ずっと、ユーザーからのマウスイベントなどが、キューに入るのを待っている。
キューにイベントが入ると、それを処理する。
それを永久に続ける

一方、CUI では、そういうイベントドリブンは聞かない。
マウス操作で、何かをするというのも聞かない。
Ctrl + C を押して、割り込み処理を発生させることはできるが

でも、こういうアプリの終了などのソフトウェア割り込みも、イベントループで拾うけど

317 名前:296 mailto:sage [2020/09/28(月) 09:08:06.54 ID:QIpyCS2B0.net]
そんな難しい本を読んでも、理解できないから無駄だと思う

検索した方がよい

318 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 09:11:10.60 ID:Zg0P7tB00.net]
>>306
用意した画像の一部だけが表示されている
たとえば、
pb.SizeMode = PictureBoxSizeMode.StretchImage;
といった感じでPictureBoxSizeModeを指定してみると何が起こってるのか何となくわかるんじゃね?



319 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 09:42:36.85 ID:Uql71HHWa.net]
>>311
ctl+Cまで入力コマンドを待つCUIアプリはイベントドリブンと呼べるのでは?

320 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 09:50:37.80 ID:o994bwz+0.net]
>>311
CUIでもターミナルベースの業務アプリなんかだとイベントループ書くぞ。

321 名前:296 mailto:sage [2020/09/28(月) 10:20:17.53 ID:QIpyCS2B0.net]
結局、GUI・CUI も、どちらもイベントドリブンなのか

大部分は同じなのかも

322 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 10:59:03.73 ID:o994bwz+0.net]
>>316
お前Electronの内容もちょっと変な理解してるし、毎回思うけど知ったかぶりしないほうがいいぞ。
結局Rubyの事しかわかんないんでしょ。

323 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 11:27:34.04 ID:j++FlVxl0.net]
Delphiに存在したメタクラス型(クラス型を代入、参照できる変数)は
C#に無いの?

324 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 11:42:34.18 ID:ii9XSMYC0.net]
>>310
ありがとうございます
アマゾンレビューをチラ見したところ目的に合ってそうです
>>312
とりあえず頑張ってみます

325 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 11:53:52.45 ID:phqY8Xtx0.net]
>>318
Typeは?

326 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 13:53:50.99 ID:j++FlVxl0.net]
Typeでもある程度事は足りるけど、
あらゆる型のtypeof()を代入できるので不確実だし、Activatorとか必要で面倒。
無いなら仕方ないが…まあ移植が大変

327 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 18:57:37.61 ID:nO4ceNb30.net]
>>313
そのプロパティ?はまだ本内で教わってないですが使ったら表示されました。
ありがとうございます!!

328 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 22:54:29.00 ID:iemn9XLz0.net]
>>311
CUIなRTOSなんて普通にあるけどなぁ



329 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 10:58:06.91 ID:RvE6O+PE0.net]
.NET Coreでコンソール画面に
「こんにちは、WORLD!」と表示させようとすると
なぜか「こんにちは、WORL!」のように表示されます

コンソール画面のメニューからフォントを変更すると正しく表示されますが原因が分かりません

330 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 11:22:49.95 ID:OZkIKLkD0.net]
コンソール画面とは?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<278KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef