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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/12/15(土) 10:46:07.45ID:Wu4Fx0bU
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
0787デフォルトの名無しさん
垢版 |
2020/10/02(金) 00:49:35.05ID:yLHMA8M3
.net coreはまだまだコントロールが足りなくて切り替えは厳しいな
シコシコ作った自家製クソアプリがラズパイ上で踊り狂う日を待ってます
0788デフォルトの名無しさん
垢版 |
2020/10/02(金) 07:20:55.57ID:0z7X4+Qf
async awaitの原理がよく分かりません。
await以下のコードは実行されないにも関わらずawait中にそのスレッドが固まらないのはどういう原理なのでしょうか?
具体的にはUIのボタンクリックなどのイベント関数内でのawaitの話です
0792デフォルトの名無しさん
垢版 |
2020/10/02(金) 11:06:17.65ID:vEIDHK0R
const 汚染とか GPL 汚染とかと一緒で
async await 汚染が広がるってのはある
もちろん回避方法知ってれば回避可能
0794デフォルトの名無しさん
垢版 |
2020/10/02(金) 12:18:32.20ID:HvZS2dGY
githubでc#製のソースコードみてると
visual studioが吐いたファイルとかが含まれてないんですけど
普通はvisual studioで開発をしないものなんでしょうか?
0796デフォルトの名無しさん
垢版 |
2020/10/02(金) 12:23:44.70ID:vEIDHK0R
無駄なものは要らんので .cs だけで済む場合は .cs だけのプロジェクトの方が好き
0798デフォルトの名無しさん
垢版 |
2020/10/02(金) 12:30:57.59ID:DER3efA5
自動生成されるようなものをリポジトリに含めてもしょうがないから除外してるだけなんじゃね?
0809デフォルトの名無しさん
垢版 |
2020/10/02(金) 22:52:20.08ID:SS+YiBnr
道路で逆走している車から見て「車がみんな逆走しているぞ」って言っている感じか
0810デフォルトの名無しさん
垢版 |
2020/10/02(金) 23:14:47.03ID:p0460FPy
そう言えばこの命令が欲しいときってプログレスバーで進捗状況も更新して欲しいときが99.89%なんだけど
結局while+sleepのが綺麗に書けることが多くて使ってないな
0811デフォルトの名無しさん
垢版 |
2020/10/03(土) 00:00:37.61ID:YZwmKYAY
正しい使い方を知らないのにも関わらず悪手、なんてよくいい切れるなw
プログレスバーはIProgress使うだけでじゃん
0813デフォルトの名無しさん
垢版 |
2020/10/03(土) 01:07:24.42ID:sQ+SRwj5
「非同期メソッドは、asyncがついた関数内からしか呼べない。」みたいなことが書いてある嘘ブログが結構あるからな
例の大量書き込みの人は、そう言うのを書いてる人か、それかそう言うのを読んで真に受けてる人なんだろう
0814デフォルトの名無しさん
垢版 |
2020/10/03(土) 02:58:19.24ID:/wA+nWqo
プログレスバーなんて、簡単に動かないだろ。
マルチスレッドなのに、素人ができるわけない

非同期と同じ。
コンテキスト・文脈が異なるから、特別な書き方をしないと動かない
0815デフォルトの名無しさん
垢版 |
2020/10/03(土) 08:26:53.20ID:sEhX1LxQ
別にasync/awaitがなかった時代でも
GUI操作のときだけForm.Invoke()すればよかっただけじゃない

Rubyジジイは老害みたいなこと言ってるわりにいにしえの当たり前のスキルすら持ち合わせてない
0816デフォルトの名無しさん
垢版 |
2020/10/03(土) 08:56:04.28ID:rbnJu3Rq
>>814
C#でマルチスレッドじゃないと動かないプログレスバーなんか存在しないからコンテキスト・文脈が異なるスレに帰れ
0817デフォルトの名無しさん
垢版 |
2020/10/03(土) 10:29:50.07ID:XvRdXCx6
>>789
ありがとうございます。
大雑把に言えば、await以下の同関数内のコードは内部的にはコールバック化されるという理解で良いんでしょうか?
そして待機せずに同関数から抜けるため固まらないと
0818デフォルトの名無しさん
垢版 |
2020/10/03(土) 10:49:35.02ID:NjZXoVXL
UnityのC#にTaskが無いのは何故なんです?
0819デフォルトの名無しさん
垢版 |
2020/10/03(土) 10:58:38.87ID:Rg22Ictw
C++では、クラスの宣言とメソッドを別々にかけるじゃないですか
class A{
 int get();
};

int A:get()
{
}
みたいに。C#でも同様な書き方は出来ますか?
0820デフォルトの名無しさん
垢版 |
2020/10/03(土) 11:03:01.12ID:C2ZTF6bo
partial は?
0821デフォルトの名無しさん
垢版 |
2020/10/03(土) 11:09:15.30ID:/wA+nWqo
JavaScript で言えば、await は、非同期・async を、同期的に書けるもの

例えば、処理A, B, C があり、
Bが非同期なら、コンテキスト・文脈が異なるから、
A, C, B の順番で実行される

await を付けると、下へ行かない。
同期処理と同じ、A, B, C の順番になる

面倒な非同期処理を、同期処理のように、上から書いた順番通りに実行される

漏れは、C# のawait は知らないから、自分で調べて
0825デフォルトの名無しさん
垢版 |
2020/10/03(土) 11:44:35.80ID:NjZXoVXL
99% から 100% になるのに 3日かかるんですね判ります
0826デフォルトの名無しさん
垢版 |
2020/10/03(土) 12:45:54.24ID:7JLpHN6R
>>825
いや、すぐ100%になるよ
その後の

更新したファイルのチェックをしています

に時間かかるけど
0827デフォルトの名無しさん
垢版 |
2020/10/03(土) 14:54:53.24ID:cvTPWa8P
C#のよりよい書き方を教えてくれるチェッカーってありますか?
シェルスクリプトだとshellcheckみたいなの
0831デフォルトの名無しさん
垢版 |
2020/10/03(土) 18:26:08.32ID:NyXscKPR
システム更新系のでそんなのがあった気がしたねw

まあ、処理時間ベースの進捗度なんて出すのはどうせ難しいんだから
フリーズしてる不安だけ感じさせないようにしてくれれば十分だよね。

VS2005の時代のイメージライブラリーにナイトライダーのあれみたいな
gifアニメがあったけどああいうのでいいと思う

10段階の処理のnフェーズ目を処理中、みたいな表示はあってもいいかもしれんが
スレ違いなのでこの辺で
0833デフォルトの名無しさん
垢版 |
2020/10/04(日) 10:09:30.72ID:WrglaOe5
確かにファイルのダウンローダー系のは残り時間表示が減ったり増えたりするな
0834デフォルトの名無しさん
垢版 |
2020/10/04(日) 10:12:08.66ID:8hNgrfXT
.NET5っていつから正式版使えるの?
俺の中の作りたいプログラムキューが結構溜まってきてるんだけど
0839デフォルトの名無しさん
垢版 |
2020/10/04(日) 17:41:26.92ID:OuBWvyJw
C#でアプリケーションを作ってVisualStudioInstallerをSetupファイルを作ってインストーラーを使ってます
アプリで参照しているdllのバージョンが上がってSetupファイルをビルドして再配布しようとしているんですが
どうも配布先で実行しても該当のdllだけ差し替わらないのです
VisualStudioInstallerの方では該当のdllを参照しているバージョンはプロパティで確認しても最新ですが
同名dllの該当ファイルはアップデート後も書き換わらず上書きされない状態です
何か解決方法ありますでしょうか?
0840デフォルトの名無しさん
垢版 |
2020/10/04(日) 17:43:55.75ID:OuBWvyJw
補足です
配布先で、一旦アンインストールしてSetupを実行する限りは
新しいバージョンのdllが入り問題なく動作しています
0841デフォルトの名無しさん
垢版 |
2020/10/04(日) 17:54:40.72ID:h2vHNKtG
>>839
該当のdllがファイルバージョンを上げ忘れてると思われる
msiは対象のファイルのバージョンが上がっていないと上書きしない余計な仕様があって、これに引っかかる(無視する設定は無いはず)
まずはdllファイルのプロパティからバージョン情報を確認して、新旧で変わっていないようなら配布元に更新をお願いするしかない
0842デフォルトの名無しさん
垢版 |
2020/10/04(日) 18:02:38.99ID:OuBWvyJw
>>841
レスありがとうございます

該当のdllのプロパティを除くと、製品バージョンは確かに新しいものですが
ファイルバージョンが1.0.0.0と触ってないような値です
おっしゃられるmsiがチェックするのは、このファイルバージョンという理解であっていますか?
そのメーカーさんが最近nugetでアップデートを配布するようになって
アップデートする度に配布先でバージョン不一致のトラブルで悩まされてるのですが
もしかしてこのせいなのかな・・・
0845デフォルトの名無しさん
垢版 |
2020/10/04(日) 18:29:28.20ID:OuBWvyJw
>>843
一応、仮想環境入れてやっておりまして、そこで調べていてdllのバージョンが変わってないのに気づいた次第です

>>841
同メーカーの別のアップデートされているdllのプロパティを見たら
ちゃんとファイルバージョンも製品バージョンと一致させて更新されていました
トラブルが起きたdllはファイルバージョン入れ忘れの可能性が高そうなので
メーカーさんに問い合わせてみます
0846デフォルトの名無しさん
垢版 |
2020/10/04(日) 19:29:22.35ID:h2vHNKtG
>>845
少し訂正
解決方法としては、REINSTALLMODEプロパティ※を変更する方法もあるそうだ
※VisualStudioInstallerのプロパティではない
結構手間がかかるみたいだから、dllを修正して貰うのが一番だと思うけど一応
0847デフォルトの名無しさん
垢版 |
2020/10/04(日) 19:59:56.73ID:7zaljJEm
どぼんさんのとこにREINSTALLMODEを設定する方法が書いてあるので
これが一番簡単だね
http://dobon.net/vb/dotnet/deployment/overwrite.html

これはどぼんさんのところには記事がないと思うが、
MSIのプロパティは外部ツールで手動でやらなくてもPostBuildEventで
自動的に変更する方法があって、ググれば出てくると思う。

しかしMSIってそんな仕様があったんかw
っていうかもうVS10年ぐらい使ってないんだけど
今MSの推奨するインストーラーって何なの?

MSIは廃止されるはずだったよね?
0851デフォルトの名無しさん
垢版 |
2020/10/04(日) 21:47:36.10ID:OuBWvyJw
アドバイスありがとうございます
とりあえずメーカーさんには問い合わせをだしつつ
簡単そうなOrcaを使ってamusにし、強制的にdllを上書きするようにしてうまくいきました
今回分は手動でmsi書き換え対応、あとはメーカーさんの対応待ちというところでひとまず解決です
ご教授いただき感謝です
0853デフォルトの名無しさん
垢版 |
2020/10/05(月) 14:34:55.98ID:q4O9ogxl
ボタンクリックでpingを並列処理(guiでparallel.for)させてるのですが、並列処理が終わった後に何らかの処理をさせたいのですが、終わる前にさせたい処理が始まってしまうのは何故でしょう?
0854デフォルトの名無しさん
垢版 |
2020/10/05(月) 15:16:41.19ID:e+L/idp9
終わるまで待たずに始めてるからだろう
0855デフォルトの名無しさん
垢版 |
2020/10/05(月) 16:03:32.02ID:q4O9ogxl
>>854
すいません、結果表示の所でデリゲートしてました。
デリゲートしてたら抜かされるんですね。
0856デフォルトの名無しさん
垢版 |
2020/10/05(月) 17:21:36.72ID:yAAG+Ftq
やってること、機能の理解、用語の理解、みんなめちゃくちゃすぎて、まるでQiitaをみている気分だ
0858デフォルトの名無しさん
垢版 |
2020/10/05(月) 17:41:37.83ID:gVc00iwv
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固定じゃなく動的にしたいのですが
どうすればよいですか?
0861858
垢版 |
2020/10/05(月) 18:34:00.09ID:gVc00iwv
最初[10]と宣言した後、[20]とかには・・・・変更できますか?
っと追加で質問してもいいですか?
0863デフォルトの名無しさん
垢版 |
2020/10/05(月) 18:45:03.21ID:jLRpmu5w
Resize() があるけど、これは新しいarrayを作って中身をコピって置き換えるので
期待しているようなものとはちがうかもしれない
https://docs.microsoft.com/ja-jp/dotnet/api/system.array.resize?view=netframework-4.8
arrayは要素数が変わらないのが前提というか、そういう伝統なので
要素数が変わるのが分かっているのならコレクション系のものを使いましょう
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/collections
0865デフォルトの名無しさん
垢版 |
2020/10/05(月) 21:19:26.58ID:rQ89lJX/
>>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();
}
0866デフォルトの名無しさん
垢版 |
2020/10/05(月) 22:04:35.42ID:ToydrsKO
質問です
イベントは、購読する側が寿命が短い場合自分で登録解除しないと開放されず、リークするのは分かるのですが、
イベントを発生させる側が寿命が短い場合はそのインスタンスをフィールドで持っておかないと
購読されていても途中で開放されてしまうのでしょうか
その場合、例えばコンストラクタでイベントを発生させるオブジェクトを受け取って購読するだけのような処理(以下)
public class Subscriber {
 public Subscriber(Publisher publisher) {
  publisher.ValueChanged += Publisher_ValueChanged;
 }
}
の場合、subscriberはpublisherを持っていないので、subscriberが生きている間にpublisherが開放されて購読も解除されるといったことは起こりますか?
これは設計が悪い?
0867デフォルトの名無しさん
垢版 |
2020/10/05(月) 22:23:53.32ID:rQ89lJX/
>>866
>subscriberはpublisherを持っていない
これが分かってるなら答えは自明でしょ
設計が悪いかどうかは何を実現したいか次第
でも普通は発行側の寿命を購読側に合わせたいことなんてあるのかなと思う。
0868デフォルトの名無しさん
垢版 |
2020/10/05(月) 22:36:15.65ID:ToydrsKO
>>867
ありがとうございます
UI(コントロール)のイベントを加工してロジックに伝えるアダプターのようなものを実現したいです
設計を見直してみます
0869デフォルトの名無しさん
垢版 |
2020/10/06(火) 22:21:36.32ID:0ZJ/y4Ey
パラメータをPOSTしてウェブサイトのHTMLソースを取得しています。
POSTするデータが普通の配列形式の方法は以前から知っているのですが、JSON形式でPOSTするサイトに出くわしました。
いろいろなウェブサイトを見てPOST自体はエラーせずにできるようになったようなのですが、レスポンスもJSON形式のデータしか取得できずに困っています。
欲しいのはウェブサイトのHTMLソースです。
どうしたらいいでしょうか?
0870デフォルトの名無しさん
垢版 |
2020/10/06(火) 22:21:52.52ID:0ZJ/y4Ey
   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();
   }
0872デフォルトの名無しさん
垢版 |
2020/10/06(火) 22:26:56.84ID:3gNx1ZB7
過去ログ抜こうとしてるんかな
0873デフォルトの名無しさん
垢版 |
2020/10/07(水) 04:05:43.46ID:qlNjOdYh
curl, wget でも出来る。

Windows 10 なら、C:\Windows\System32\curl.exe
が入っている。
これは、PowerShell のcurl alias とは異なる

漏れは、VSCode の拡張機能、Rest Client を使ってる
0875デフォルトの名無しさん
垢版 |
2020/10/08(木) 18:41:10.72ID:zyhORnZD
5.0始めたけど new()の出番めっちゃ多いな
varよりnew()優先にするのがいいのかな
0876デフォルトの名無しさん
垢版 |
2020/10/08(木) 20:54:36.31ID:toLcLUNb
Windows 10だけサポートしたいんですけど
.Netはどのバージョンからサポートしたらいいのでしょうか?
0879デフォルトの名無しさん
垢版 |
2020/10/08(木) 21:22:37.99ID:+UAfPznY
二つの配列A,Bがあり、Bに入っていない要素がAにある場合の処理はどのようにすればいいでしょうか?
やりたい事は、テキストファイルから一行ずつBに読み込んで格納し、なんらかの結果の配列Aとの照らし合わせを行いたいのですが、なかなか上手くいかず…
0883デフォルトの名無しさん
垢版 |
2020/10/09(金) 11:00:27.55ID:n+WfHqnB
C#で構築したORACLEを更新しているシステムがあるのですが、
入力時にタイムアウトするのを防ぐ、もしくは入力を促すような
仕組みを作るにはどうすればいいでしょうか。
0885デフォルトの名無しさん
垢版 |
2020/10/09(金) 11:16:26.16ID:n+WfHqnB
一般的な対策はありますか?
ユーザーに処理を放置せず、すぐ完了させてくれとかいうしかないですか?
自分はプログラマーでもないので詳しくなてすみません。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況