ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 お邪魔します、くだんのUnityで c#を始めてみたんですがデスクトップビルドとHTML5ビルドのクライアントで対戦ゲームを作るようなとき あるいはゲームでなくてもデータベース参照でも良いですが、 どうやって通信の仕組み作れば良いのでしょうか? >>770 プロが書かないとそこそこ危険な分野なので、Photonみたいなのを使っとくのが安全じゃないのかな https://assetstore.unity.com/packages/tools/network/photon-unity-networking-classic-free-1786 個人のゲームで無料の20CCUを使い切ったら大したもんだろうし、それを超えても500CCUまではかなり安く使えるんで、とんでもない大ヒットしない限りこれがいいよ >>771 ネットワーク通信の書き方ってUnity操作のスレなんだろうか?そこもよくわからない・・ >>772 ありがとうございます c#始めて1週間程度なもんでココのスレ来たんだけど ローカルでちょこっと遊んでみたいだけなんで photonてどういうアセットなのか? ccuが何か?すら知らなかったんで そのあたりを調べてみたいと思います。 どうもでした。 >>232 > WinformもWPFもやったことない人なら、どっちでも楽さは変わらない ってことは絶対ない 覚える分量もぜんぜん違うし 特にWPFとMVVMと一緒に覚えないといけないのは難関すぎる c#精通してる人たちでも移行がすんなりいかなかったのにふざけるなよほんと >>774 それを言ったらWinformsもサブセットだしWPFもサブセットだし大体がサブセットになるじゃん >>775 MVVMは必須じゃないぞ MVVMやらないならそんなに差があるとは思わないな MVVMまで覚えるなら確かに学習量が全然違う つーか、1年以上前の発言にレスすんなよw ボタンを置いてダブルクリックするとイベントハンドラが自動的に作られる… みたいな作りやすいUIが早くできればいいのになー >>778 VSのWinフォームデザイナで出来てるだろうが WinFormsを選択する理由がない C#はXamarin, Unity, WPFでOK >>778 どういう目的でボタンを配置したのかをAIが忖度して イベントハンドラーが自動的にプログラミングされるならすごいなー いや余計なお世話かもしれないから ダブルクリックでウィザードが起動するくらいなら出来なくもないか!? ダブルクリックでUnityもXamarinも対象位置に飛ぶだけかな? if文やトライキャッチはTABキーダブルでテンプレ挿入なるけど、まだまだ物足りない・・・ .net5からはWinUI3でUWPのガワがデスクトップで利用できるようになり xamarinからunoってのに代替わりもありそう .net coreはまだまだコントロールが足りなくて切り替えは厳しいな シコシコ作った自家製クソアプリがラズパイ上で踊り狂う日を待ってます async awaitの原理がよく分かりません。 await以下のコードは実行されないにも関わらずawait中にそのスレッドが固まらないのはどういう原理なのでしょうか? 具体的にはUIのボタンクリックなどのイベント関数内でのawaitの話です async awaitのメソッドはその時点でノーマルメソッドから呼べないので悪手 const 汚染とか GPL 汚染とかと一緒で async await 汚染が広がるってのはある もちろん回避方法知ってれば回避可能 githubでc#製のソースコードみてると visual studioが吐いたファイルとかが含まれてないんですけど 普通はvisual studioで開発をしないものなんでしょうか? 無駄なものは要らんので .cs だけで済む場合は .cs だけのプロジェクトの方が好き makefileを自分で書けっていうのは見るなって言ってるのと同じだよな 自動生成されるようなものをリポジトリに含めてもしょうがないから除外してるだけなんじゃね? slnもcsprojファイルも無いってことなんでしょ? わざわざそんなことする? でもググって出てくる例っておかしいのばっかりじゃね? 道路で逆走している車から見て「車がみんな逆走しているぞ」って言っている感じか そう言えばこの命令が欲しいときってプログレスバーで進捗状況も更新して欲しいときが99.89%なんだけど 結局while+sleepのが綺麗に書けることが多くて使ってないな 正しい使い方を知らないのにも関わらず悪手、なんてよくいい切れるなw プログレスバーはIProgress使うだけでじゃん 「非同期メソッドは、asyncがついた関数内からしか呼べない。」みたいなことが書いてある嘘ブログが結構あるからな 例の大量書き込みの人は、そう言うのを書いてる人か、それかそう言うのを読んで真に受けてる人なんだろう プログレスバーなんて、簡単に動かないだろ。 マルチスレッドなのに、素人ができるわけない 非同期と同じ。 コンテキスト・文脈が異なるから、特別な書き方をしないと動かない 別にasync/awaitがなかった時代でも GUI操作のときだけForm.Invoke()すればよかっただけじゃない Rubyジジイは老害みたいなこと言ってるわりにいにしえの当たり前のスキルすら持ち合わせてない >>814 C#でマルチスレッドじゃないと動かないプログレスバーなんか存在しないからコンテキスト・文脈が異なるスレに帰れ >>789 ありがとうございます。 大雑把に言えば、await以下の同関数内のコードは内部的にはコールバック化されるという理解で良いんでしょうか? そして待機せずに同関数から抜けるため固まらないと UnityのC#にTaskが無いのは何故なんです? C++では、クラスの宣言とメソッドを別々にかけるじゃないですか class A{ int get(); }; int A:get() { } みたいに。C#でも同様な書き方は出来ますか? JavaScript で言えば、await は、非同期・async を、同期的に書けるもの 例えば、処理A, B, C があり、 Bが非同期なら、コンテキスト・文脈が異なるから、 A, C, B の順番で実行される await を付けると、下へ行かない。 同期処理と同じ、A, B, C の順番になる 面倒な非同期処理を、同期処理のように、上から書いた順番通りに実行される 漏れは、C# のawait は知らないから、自分で調べて >>821 C#のawait知らないならC#のスレに得意げに書き込むなよ知障 99% から 100% になるのに 3日かかるんですね判ります >>825 いや、すぐ100%になるよ その後の 更新したファイルのチェックをしています に時間かかるけど C#のよりよい書き方を教えてくれるチェッカーってありますか? シェルスクリプトだとshellcheckみたいなの >>825 単調増加するとも限らない 途中で減るプログレスバーとかあるで システム更新系のでそんなのがあった気がしたねw まあ、処理時間ベースの進捗度なんて出すのはどうせ難しいんだから フリーズしてる不安だけ感じさせないようにしてくれれば十分だよね。 VS2005の時代のイメージライブラリーにナイトライダーのあれみたいな gifアニメがあったけどああいうのでいいと思う 10段階の処理のnフェーズ目を処理中、みたいな表示はあってもいいかもしれんが スレ違いなのでこの辺で 確かにファイルのダウンローダー系のは残り時間表示が減ったり増えたりするな .NET5っていつから正式版使えるの? 俺の中の作りたいプログラムキューが結構溜まってきてるんだけど >>833 ファイルがたくさんあるときは、一つのデータに固めて送れば変な変化しないと思う >>835 GAという表現は使ってないね。まだRC1だけどGo Liveライセンス有り。 C#でアプリケーションを作ってVisualStudioInstallerをSetupファイルを作ってインストーラーを使ってます アプリで参照しているdllのバージョンが上がってSetupファイルをビルドして再配布しようとしているんですが どうも配布先で実行しても該当のdllだけ差し替わらないのです VisualStudioInstallerの方では該当のdllを参照しているバージョンはプロパティで確認しても最新ですが 同名dllの該当ファイルはアップデート後も書き換わらず上書きされない状態です 何か解決方法ありますでしょうか? 補足です 配布先で、一旦アンインストールしてSetupを実行する限りは 新しいバージョンのdllが入り問題なく動作しています >>839 該当のdllがファイルバージョンを上げ忘れてると思われる msiは対象のファイルのバージョンが上がっていないと上書きしない余計な仕様があって、これに引っかかる(無視する設定は無いはず) まずはdllファイルのプロパティからバージョン情報を確認して、新旧で変わっていないようなら配布元に更新をお願いするしかない >>841 レスありがとうございます 該当のdllのプロパティを除くと、製品バージョンは確かに新しいものですが ファイルバージョンが1.0.0.0と触ってないような値です おっしゃられるmsiがチェックするのは、このファイルバージョンという理解であっていますか? そのメーカーさんが最近nugetでアップデートを配布するようになって アップデートする度に配布先でバージョン不一致のトラブルで悩まされてるのですが もしかしてこのせいなのかな・・・ 窓から投げ捨てろ 嫌ならGUID再発行して見るべし >>843 一応、仮想環境入れてやっておりまして、そこで調べていてdllのバージョンが変わってないのに気づいた次第です >>841 同メーカーの別のアップデートされているdllのプロパティを見たら ちゃんとファイルバージョンも製品バージョンと一致させて更新されていました トラブルが起きたdllはファイルバージョン入れ忘れの可能性が高そうなので メーカーさんに問い合わせてみます >>845 少し訂正 解決方法としては、REINSTALLMODEプロパティ※を変更する方法もあるそうだ ※VisualStudioInstallerのプロパティではない 結構手間がかかるみたいだから、dllを修正して貰うのが一番だと思うけど一応 どぼんさんのとこにREINSTALLMODEを設定する方法が書いてあるので これが一番簡単だね http://dobon.net/vb/dotnet/deployment/overwrite.html これはどぼんさんのところには記事がないと思うが、 MSIのプロパティは外部ツールで手動でやらなくてもPostBuildEventで 自動的に変更する方法があって、ググれば出てくると思う。 しかしMSIってそんな仕様があったんかw っていうかもうVS10年ぐらい使ってないんだけど 今MSの推奨するインストーラーって何なの? MSIは廃止されるはずだったよね? >>847 そんなに単純じゃないからちゃんと調べて アドバイスありがとうございます とりあえずメーカーさんには問い合わせをだしつつ 簡単そうなOrcaを使ってamusにし、強制的にdllを上書きするようにしてうまくいきました 今回分は手動でmsi書き換え対応、あとはメーカーさんの対応待ちというところでひとまず解決です ご教授いただき感謝です ボタンクリックでpingを並列処理(guiでparallel.for)させてるのですが、並列処理が終わった後に何らかの処理をさせたいのですが、終わる前にさせたい処理が始まってしまうのは何故でしょう? >>854 すいません、結果表示の所でデリゲートしてました。 デリゲートしてたら抜かされるんですね。 やってること、機能の理解、用語の理解、みんなめちゃくちゃすぎて、まるでQiitaをみている気分だ class myDAT { public int no; public double[] data = new double[5]; } public static void Main(string[] args) { myDAT[] mydata = new myDAT[10]; //★ for (int i = 0; i < 10; i++){ mydata[i] = new myDAT(); } クラスを配列にしたとき★の箇所の"myDAT[10]"を10固定じゃなく動的にしたいのですが どうすればよいですか? 最初[10]と宣言した後、[20]とかには・・・・変更できますか? っと追加で質問してもいいですか? >>861 普通の配列は固定長 可変長の配列が欲しいならList< T > >>856 スマヌ…足を突っ込んだばかりで良く分からずに始めたもので…別スレ案件でしたか… >>858 static void Main(string[] args) { const int defaultCount = 10; var count = defaultCount; for (int i = 0; i < args.Length - 1; i++) { var arg = args[i]; if(arg == "-n" || arg == "/n") if (int.TryParse(args[i + 1], out count)) break; } var chars = new char[count]; for (int i = 0; i < count; i++) chars[i] = (char)('A' + i); Console.WriteLine(new string(chars)); Console.ReadKey(); } 質問です イベントは、購読する側が寿命が短い場合自分で登録解除しないと開放されず、リークするのは分かるのですが、 イベントを発生させる側が寿命が短い場合はそのインスタンスをフィールドで持っておかないと 購読されていても途中で開放されてしまうのでしょうか その場合、例えばコンストラクタでイベントを発生させるオブジェクトを受け取って購読するだけのような処理(以下) public class Subscriber { public Subscriber(Publisher publisher) { publisher.ValueChanged += Publisher_ValueChanged; } } の場合、subscriberはpublisherを持っていないので、subscriberが生きている間にpublisherが開放されて購読も解除されるといったことは起こりますか? これは設計が悪い? >>866 >subscriberはpublisherを持っていない これが分かってるなら答えは自明でしょ 設計が悪いかどうかは何を実現したいか次第 でも普通は発行側の寿命を購読側に合わせたいことなんてあるのかなと思う。 >>867 ありがとうございます UI(コントロール)のイベントを加工してロジックに伝えるアダプターのようなものを実現したいです 設計を見直してみます パラメータをPOSTしてウェブサイトのHTMLソースを取得しています。 POSTするデータが普通の配列形式の方法は以前から知っているのですが、JSON形式でPOSTするサイトに出くわしました。 いろいろなウェブサイトを見てPOST自体はエラーせずにできるようになったようなのですが、レスポンスもJSON形式のデータしか取得できずに困っています。 欲しいのはウェブサイトのHTMLソースです。 どうしたらいいでしょうか? var jsonParameter = new JavaScriptSerializer().Serialize(new { hoge1 = new { hoge2 = new { fuga1 = "0", fuga2 = "1", }, hoge3 = new { fuga3="3", } } }); // リクエストの作成 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/json; charset=utf-8"; req.Accept = "application/json, text/plain, */*"; using (var streamWriter = new StreamWriter(req.GetRequestStream())) { streamWriter.Write(jsonParameter); } var httpResponse = (HttpWebResponse)req.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { string result = streamReader.ReadToEnd(); } ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる