ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 .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();
} curl, wget でも出来る。
Windows 10 なら、C:\Windows\System32\curl.exe
が入っている。
これは、PowerShell のcurl alias とは異なる
漏れは、VSCode の拡張機能、Rest Client を使ってる 5.0始めたけど new()の出番めっちゃ多いな
varよりnew()優先にするのがいいのかな Windows 10だけサポートしたいんですけど
.Netはどのバージョンからサポートしたらいいのでしょうか? 二つの配列A,Bがあり、Bに入っていない要素がAにある場合の処理はどのようにすればいいでしょうか?
やりたい事は、テキストファイルから一行ずつBに読み込んで格納し、なんらかの結果の配列Aとの照らし合わせを行いたいのですが、なかなか上手くいかず… >>880
>>881
ありがとうございます!こちらを元に調べてみます! C#で構築したORACLEを更新しているシステムがあるのですが、
入力時にタイムアウトするのを防ぐ、もしくは入力を促すような
仕組みを作るにはどうすればいいでしょうか。 一般的な対策はありますか?
ユーザーに処理を放置せず、すぐ完了させてくれとかいうしかないですか?
自分はプログラマーでもないので詳しくなてすみません。 ■ このスレッドは過去ログ倉庫に格納されています