- 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
- 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]
- コンソール画面とは?
- 331 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 12:42:00.94 ID:YPdRC9Oi0.net]
- >>324
コード貼れ
- 332 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 13:17:16.07 ID:RvE6O+PE0.net]
- static void Main(string[] args)
{ var str = "こんにちは、WORLD!"; Console.WriteLine("{0}", str); Console.ReadKey(); }
- 333 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:53:06.91 ID:wYCx593I0.net]
- >>327
これかな? https://aquasoftware.net/blog/?p=895
- 334 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 17:57:00.27 ID:wYCx593I0.net]
- >>327
これも https://csharp.clock-up.jp/contents/dotnetcore/codepage-encoding
- 335 名前:323 326 mailto:sage [2020/10/10(土) 19:40:42.12 ID:RvE6O+PE0.net]
- >>328 >> 328
試してみましたが改善しません 出力をコピーしてメモ帳にペーストしてみると正常なので どうも文字化けではないようです 文字の表示位置がずれて重なっているような感じです
- 336 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 20:03:24.77 ID:wYCx593I0.net]
- >>330
こちらでは正常なんでコンソール画面のプロパティの設定がおかしいんでは?
- 337 名前:蟻人間 mailto:sage [2020/10/10(土) 20:04:01.51 ID:c6WyhNHPd.net]
- 何てフォント?
- 338 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 20:23:39.28 ID:RvE6O+PE0.net]
- MSゴシックの18ポイント、Windows8.1です
来週会社のパソコンで試してみることにします
- 339 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 20:41:27.03 ID:wYCx593I0.net]
- >>333
8.1はプロパティでレガシーコンソールのチェックある?あったらそれチェックでいけるんでは?
- 340 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 20:52:24.98 ID:RvE6O+PE0.net]
- ないです
- 341 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 21:17:43.96 ID:RlZbVDXEa.net]
- 何にもアドバイスできないのに恐縮だけど、
>コンソール画面のメニューからフォントを変更すると正しく表示されますが だったら具体的にどのフォントで問題が発生してどのフォントで発生しないか 確認した範囲で書いた方がいいのでは あと、普通テキスト変えていろいろ試さないか?
- 342 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 21:50:46.82 ID:wYCx593I0.net]
- 他のアプリでMSゴシックの18ポイント使ってみ。フォントのファイルが正常かどうか
使えるなら8.1のコンソールウィンドウの問題でしょ
- 343 名前:デフォルトの名無しさん [2020/10/10(土) 23:23:35.42 ID:wgBcrtZd0.net]
- >>321
Typeで事足りそうなものだが… あるいは設計の問題かも。 どんな設計なのかも書き込んでみたら?
- 344 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 10:49:57.27 ID:N2Y7+9Dy0.net]
- ローカルでiTextSharpを利用して、
Json形式のデータからPDF帳票を作る・・てのつくったんだが、 (サーバ上で、APIコールとかファイル読込でPDFファイルを返したかった。 イメージ的にはページごとにTextとかLineを指定したJsonデータ) いざ業務に転用できるかなってフェーズにきて iTextSharpのライセンス(AGPL)がやだなあ、って思ってる。 PDFSharpは日本語がなんかうまくいかない。 今のC#で、PDFを作るの、皆さんはどうやってる?
- 345 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 10:55:16.27 ID:0/xBmjm30.net]
- >>339
業務だったらExcelCreator使ってる
- 346 名前:デフォルトの名無しさん [2020/10/20(火) 10:59:00.80 ID:pHiz9StDF.net]
- PDFSharp使ってるけど問題無し
- 347 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 11:10:22.94 ID:d69BLAaZa.net]
- React、Vueで帳票レンダリング
ヘッドレスブラウザでPDF印刷
- 348 名前:デフォルトの名無しさん [2020/10/20(火) 11:13:59.21 ID:pHiz9StDF.net]
- 日本語不安ならグラフィック直接PDFに張り付けろ
- 349 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 12:28:25.89 ID:eHl8PxCr0.net]
- PDFSharpは日本語の折り返しに対応してなかったぞ。
- 350 名前:デフォルトの名無しさん [2020/10/20(火) 12:50:06.87 ID:pHiz9StDF.net]
- >Json形式のデータからPDF帳票を作る
これが折り返しするかどうかだな
- 351 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 13:46:22.13 ID:N2Y7+9Dy0.net]
- 皆さんありがとうございました・・・
方針としてはPDFSharpをもっかいいじくり倒して、他にもいろいろ試してみます・・・ プレプリント紙への印刷やめたい >>340 そんなソフトあるんですね!サーバ版たけぇ・・ >>342 クライアントサイドのレンダリングはちょっときついです、環境バラバラなんで >>343 自分にはグラフィックをちょうどよくテンプレにはめる設計力がなさげ >>345 折り返しするんですよね。。 まあそれ以前使うフォントが特殊でつまずいたっていうのがありましたが
- 352 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 13:50:07.09 ID:d69BLAaZa.net]
- >>346
クライアントサイドじゃないよ サーバーでヘッドレスブラウザ使ってPDF出力してレスポンス返すだけ
- 353 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 14:00:01.34 ID:0/xBmjm30.net]
- >>346
Excelで帳票のテンプレート作ってそれをPDFにできるんでめっちゃ楽 みんな慣れてるでしょExcel帳票w
- 354 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 15:28:40.52 ID:N2Y7+9Dy0.net]
- >>347
そうなんですね!ちょっと見てみます >>348 Excel帳票大好きです(大嫌いです)
- 355 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:09:37.19 ID:CqCKSidt0.net]
- C♯が現在最強言語らしいので勉強したいのですが
マイクロソフトはVB6の開発を打ち切ってプログラマを裏切った過去があるそうで なかなか踏み切れずにいます。。。 C♯は20年後も開発が続いてると思いますか? 教えてエロい人
- 356 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:14:23.52 ID:Nb9oJ8Mwd.net]
- そんな先のことなんざわからん
確実に言えるのは今勉強している技術を20年後も変わらずに使い続ける前提でいるような技術者は居ない(と信じたい) 生き残ってるなら初期学習がない分少し楽かもしれないけど、新しいのが台頭してくりゃそちらを新たに学習するだけ
- 357 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:25:01.94 ID:CqCKSidt0.net]
- そうですか。先のことは誰にもわからないですよね。
逆に20年後も確実に主力な言語ってPythonくらいかな?
- 358 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:25:26.41 ID:cR623l/E0.net]
- >>350
開発が続いてる言語の新しい技術についていくような人はどんな言語でもすぐ学べる
- 359 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:31:38.91 ID:CqCKSidt0.net]
- >>353
新しい技術について行く用意はあるんですが 言語の基本的な記述などのルールが変わるのが面倒なんですよね。。。
- 360 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:45:13.07 ID:0/xBmjm30.net]
- C#ほど後方互換性を重要視している言語ってなかなかないと思うけどね
- 361 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 16:48:10.12 ID:CqCKSidt0.net]
- >>355
そうなんですか。ではC♯を勉強すれば基本記述まで変更なんて 事はしばらくはなさそう?ですね。。。 勉強してみます!!
- 362 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 17:16:01.37 ID:nipGGPAZa.net]
- >>354
勉強が1ヶ月続くかどうかも怪しい奴が20年後の心配をするのは馬鹿げているぞ。 そんなことじゃ、何かを勉強し始めたとしてもことあるごとに足踏みして前進できない未来しか見えない。
- 363 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 18:10:04.06 ID:kSL2D2eBa.net]
- OfficeのマクロはまだVBなんだっけ?
- 364 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 18:13:11.84 ID:Nb9oJ8Mwd.net]
- そだね
python使えるようにするみたいな話はあったけど進行してるのかな?
- 365 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 18:15:13.55 ID:ATqqkPAW0.net]
- >python使えるようにするみたいな話
頓挫したぞ
- 366 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 19:53:46.10 ID:c2x7XoZLd.net]
- 贅沢言わないから.NETにpython入れてVisualStudio(codeじゃない方)でサポートしてくれるだけでいいのに
- 367 名前:デフォルトの名無しさん [2020/10/20(火) 21:29:38.81 ID:j1S9Ds0j0.net]
- それIronPythonと何が違うの?
- 368 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 21:48:49.93 ID:iUu5GsdY0.net]
- >>358
まだExcelのWeb版だけみたいだけどJavaScript/TypeScriptが使える マクロじゃなくアドインならC#やF#みたいなCLR言語ならなんでも可だったかと
- 369 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 22:16:42.30 ID:jgnvePEX0.net]
- ChromeベースのWebView2がやっとラウンチしたようだね。まだ.netじゃ使えないが
Previewで確認したところマウスの戻るボタンが使えるのがいい所だな
- 370 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 22:51:38.52 ID:kSL2D2eBa.net]
- >>363
へーそれは知らんかったありがと。
- 371 名前:デフォルトの名無しさん mailto:sage [2020/10/20(火) 23:36:15.59 ID:CqCKSidt0.net]
- >>362
IronPythonって2.7っしょ 使えないな。。。
- 372 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 00:36:52.32 ID:0KDGF23Y0.net]
- なんかうろ覚えなんだが
こういう非同期処理の書き方ってちゃんと動いたっけ? if(!locked){ locked = true; await xxx.Task; locked = false; } async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無いって昔判断したような記憶はある
- 373 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 09:14:18.23 ID:hl6LkBs90.net]
- ソースの一行単位でスキがうまれるので無理じゃね
ifとlocked=trueの間に実行されてる
- 374 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 09:16:03.92 ID:hl6LkBs90.net]
- 1行単位どころじゃなかった
意味不明なところでも割り込みあるわw
- 375 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 09:43:40.30 ID:eNSg6QZpH.net]
- 四捨五入の結果がおかしいのって自分だけかな・・・
decimal v = -0.0195m; decimal rounded = Math.Round(v, 2, MidpointRounding.ToPositiveInfinity); Console.WriteLine(rounded); ってすると、小数点2桁までになるよう(小数点3桁目を)四捨五入するので -0.02になるはずなのに、結果が-0.01になっちゃうんですけど・・・
- 376 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 09:56:42.42 ID:lxmGvu010.net]
- >>367
Taskの中でlockする https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/lock-statement
- 377 名前:デフォルトの名無しさん [2020/10/21(水) 12:02:28.19 ID:sg7OOy0L0.net]
- >>367-369
awaitで同期取ってるから問題ない >>370 To Positive Infinityだから正数寄りになる ゼロを基準にしたければMidpointRounding.AwayFromZeroを指定する await(待つ)もそうだが、変な日本語のリファレンスよりも明快な解説が変数名に詰まってるんだからお前らはまずその単語をGoogle翻訳に掛けるべきだと思うわ
- 378 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 12:16:57.36 ID:hl6LkBs90.net]
- >>372
いや if(!locked){ 実行 別タスクlockedのfalseを見て処理開始 locked = true; 別タスク割り込まれたら困る処理開始 await xxx.Task;←別タスクと衝突 locked = false; } 起こるじゃん
- 379 名前:デフォルトの名無しさん [2020/10/21(水) 13:03:41.62 ID:eNSg6QZpH.net]
- >>372
-0.01と-0.02の中間(MidPoint)である-0.015のときの丸め方(Rounding)として 「MidpointRounding.ToPositiveInfinity」を指定したつもりだったのですが・・・ MidPointじゃないときにも「ToPositiveInfinity」が適用されちゃうんですね・・・ JavaScriptのMath.Round()とおなじような(四捨五入される桁の数字が5の場合に 正の無限大の方向で丸める)四捨五入をしたかっただけなのですが、 関数を自作しないとだめみたいなので自作します。 お騒がせしました。
- 380 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 13:30:40.39 ID:UaTtUbsy0.net]
- await絡みのときは、排他制御はSemaphoreSlim使うのが定番ですよ
https://www.atmarkit.co.jp/ait/articles/1411/11/news117.html
- 381 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 13:44:12.17 ID:RtxzEAIBa.net]
- 四捨五入:わかる
銀行丸め:わかる 正の無限大の方向で丸める:何の意味があんのそれ?
- 382 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 13:52:03.73 ID:xBoANC0iM.net]
- 切り上げって知ってる?
- 383 名前:デフォルトの名無しさん [2020/10/21(水) 14:15:10.32 ID:sg7OOy0L0.net]
- >>374
それならこんな感じで簡単に作れるから頑張れ static decimal[] table = new decimal[]{1E0m, 1E1m, 1E2m, 1E3m, 1E4m}; static decimal Round(decimal num, int pow) => Decimal.Floor((num * table[pow]) + 0.5m) / table[pow]; decimal num = Round(-0.015m, 2); // -0.01 >>373 普通にメインスレッドから叩いていればこうなるからな if(!locked){ // thread 1 locked = true; // thread 1 await xxx.Task; // thread 2 locked = false; // thread 1 }
- 384 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:19:07.15 ID:lJjSrE40d.net]
- 正負どっち方向に動くかわかんない変換より確実に方向がわかっている変換が必要なことはあるよ
- 385 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:26:27.71 ID:RtxzEAIBa.net]
- -2.4 → -2
-2.5 → -2 -2.6 → -3 こういう丸めが意味を持つケースが一般的とは思えない >>377 知らないのは君だと思うよ
- 386 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:32:15.81 ID:lJjSrE40d.net]
- 5捨6入って特定に分野では一般的な計算方法では?
俺は使わないけど
- 387 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:33:15.98 ID:RtxzEAIBa.net]
- >>381
3.5 → 4 なんだよ
- 388 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:47:36.44 ID:8k52si4D0.net]
- それでもう.NET5使ってええの?
- 389 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 14:52:13.96 ID:v0oiVQF00.net]
- いいよ
- 390 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 15:00:31.64 ID:5E7rZ8hS0.net]
- >>378
それが問題になるのは、そのifブロックが複数スレッドで実行されたときだからな
- 391 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 16:37:46.89 ID:APVpE4AA0.net]
- >>378
はじめのlockedをみてるガードは別スレッドからのアクセスに対して無力だよ そこはおk? >>378の番号で言ったらThread3以上のスレッドからの話ね
- 392 名前:デフォルトの名無しさん [2020/10/21(水) 17:36:18.89 ID:sg7OOy0L0.net]
- >>386
つまりこういうのを危惧してるのか? Task.Run(() => { if(!locked){ locked = true; await xxx.Task; locked = false; } }); だとしたらこんなのは仮定
- 393 名前:に持ち出すのがそもそも間違い
それ言い出したらフィールド操作するあらゆるメソッドで「並列で呼び出される可能性がある」とlock()で括らなきゃいけなくなってしまう [] - [ここ壊れてます]
- 394 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 17:53:44.86 ID:lxmGvu010.net]
- ifブロックがシングルスレッドでしか実行されない状況で
lockが必要な状況ってどういうの?
- 395 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 17:55:56.87 ID:5E7rZ8hS0.net]
- 元の質問がマルチスレッドでのロックに関する質問だと思うのだがな
このコードはスレッドセーフですか? いいえ危険です みんなが回答してるのはそういう事 このスレの趣旨や質問者のレベルを考えると妥当な仮定と回答だと思うぞ
- 396 名前:デフォルトの名無しさん mailto:sage [2020/10/21(水) 17:58:26.66 ID:5E7rZ8hS0.net]
- >>388
再入すればやばい気がしないでもない
- 397 名前:デフォルトの名無しさん [2020/10/21(水) 18:02:52.19 ID:sg7OOy0L0.net]
- 元の質問って>>367だろ?
> async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無い 「同じスレッドに戻る」を認識してるなら疑いなくtrueやん ここで「でも別スレッドで動かしたら危険」と言うのは質問の前提を崩してる
|

|