C#, C♯, C#相談室 Part93©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/10/18(水) 15:34:04.84ID:jnsT8t6ma
購読側じゃなく発行側が勝手に解除ってのがちょっと...
むしろどういう場面で必要になるのか想像できないな

> +=って内から外へ処理出しする訳だから
> インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
ここは何を言ってるのかよく分からない

まあ、イベントというかデリゲートのマルキチャストの仕組みが分かりづらいのはわかる
2017/10/18(水) 15:50:00.66ID:h6dEijxza
>>92
正しいというかとりあえず安全なのは何もしないの放り込んどく
それでも勝手に消されて困るのがあるかもしれんがw
2017/10/18(水) 16:11:03.50ID:ufsScDVj0
>>94
例えば非同期通信でデシリアライズ終わったらイベント投げて後は勝手に死ね、って場合
-=だと発行側で解除するのが困難でリークしちまう
最新VerC#ならTaskで後処理書けばいいけど、Unityだとつい最近まで3.5だったから
2017/10/18(水) 16:24:45.96ID:jnsT8t6ma
>>96
俺の理解不足だったらごめん

リークするのはイベントの購読側のオブジェクトLがイベントの購読を解除しないまま
Lを参照する変数がなくなった場合で、発行側のオブジェクトPのイベントに
Lのメソッドが登録されたままPへの参照がなくなってもそれはリークにならないと思うんですが
2017/10/18(水) 16:39:10.41ID:ufsScDVj0
>>97
そう思ってた時期が俺にもありました
しかし実際はリークしてOutofMemoryが出る
どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい
本当にそういう理屈かは知らんけどnullぶち込むと例外でなくなる
2017/10/18(水) 17:26:02.20ID:jNhOnQNR0
思い込みって怖いネー
2017/10/18(水) 17:46:05.16ID:GswCLlj60
>>98
>どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい

登録解除してないから購読側は発行側から参照されてて回収されない
その状態で購読側が発行側を参照してるんなら発行側も回収されないよね
2017/10/18(水) 19:19:26.31ID:j/PgXgnk0
循環参照しててもルートから到達不能なら回収されるよ
されないなら単に循環参照以外の参照が何かしら残ってるだけ

いいや解放されないね!とかいう思い込みに付き合う気はないから
口ごたえがしたければ、VSのメモリーアナライザーで
リークしているというオブジェクトの参照状態のスナップショットを撮って
ここに貼り付けてから続けるように
2017/10/18(水) 21:18:06.23ID:GswCLlj60
>>101
すまんすまん、他の言語と勘違いしてた。
2017/11/07(火) 14:20:16.62ID:7CEykIkZ0
WebBrowserコントロールを使うと、レジストリ編集しないと自動的にIE7相当になってしまうんですが、
レジストリ編集無しでIE11相当にするにはどうしたらいいでしょうか?

もしくは、dllファイル1つで済むなら、他のブラウザコンポーネントでもいいです。
2017/11/07(火) 14:42:48.60ID:uJ4GX7RNM
IEは他にはhtmlのmeta要素使うとか
レジストリっていってもHKCUなんだからアプリ起動時に書き込むだけのことだけど
2017/11/07(火) 18:40:38.64ID:MJK6I9RA0
>>103
CefSharpっていうChromiumの実装がNuGetにあるよ
AnyCPUに対応してないんで導入が若干手間だけど気合いでがんばれ
2017/11/08(水) 00:31:11.06ID:NuL34q9d0
>>103
CoInternetSetFeatureEnabled
2017/12/18(月) 07:59:20.53ID:mWvJQqvN0
#EntityFrameworkの質問ってここでよいですか?

EFCore+Sqliteで開発してるんですが、".db"ファイルのパス指定で困ってます。

コネクション作成時に、以下でdbパス指定をしています。
var connectionString = new SqliteConnectionStringBuilder { DataSource = @"./app.db" }.ToString();

この場合、理由がよく分かってないのですが、
Update-Databaseを実行した時(CreateDatabaseが発行される時)、プロジェクトフォルダからの相対パスになり、
SaveChangesを実行した時(Insert文が発行される時)、/bin/debugからの相対パスになります。

毎回相対パス指定を変えるのが面倒で、かつ絶対パス指定はしたくないもので。
何か良い方法はありませんでしょうか。
2017/12/18(月) 13:46:10.03ID:325qmzymM
ここじゃないと思うの
2017/12/18(月) 14:56:45.39ID:dTBoNCZ50
>>107
で、app.dbはどこに有るのよ、
2017/12/18(月) 14:57:20.68ID:E4FIT7xPa
俺ならexeパス取得して絶対パス作ってそれ使うけど、
絶対パスいやならカレントフォルダ変更したら?
2017/12/18(月) 23:30:30.75ID:mWvJQqvN0
>>109
プロジェクトフォルダにできます。
ただ、プログラム実行時は別のパス見てるからDBないエラーになります。

>>110
あー、それいいかもです。
やってみます。
2017/12/31(日) 15:13:16.63ID:n7dS7ECy0
個々の人ってWinFormとWPFどっちで作ってる?
2017/12/31(日) 15:13:40.84ID:K0nOGJob0
WPF
2017/12/31(日) 16:15:17.15ID:jcdX0HHma
何度聞かれてもformだ
2017/12/31(日) 16:16:35.61ID:PdI3PgJiM
オレも2年前からWPFにした。
2017/12/31(日) 16:35:43.42ID:GvxCaHuK0
新規は基本的にWPFだけど、使い捨てのツールはFormsのことも多い。
2017/12/31(日) 16:54:40.12ID:Jm0z8SXaF
昔はVSが何かっつと即堕ちして使いもんにならんかったが
今はまともになったんかねWPF
2017/12/31(日) 17:32:53.36ID:n7dS7ECy0
WPFって技術資料があんまないから、つっかかりにくいんだよなあ
2017/12/31(日) 18:07:24.15ID:jSVu2Yi+0
>>118
日本語が変だな
外国人?
2017/12/31(日) 18:22:11.56ID:OKQGXBiEx
>>119
あれだ外人からみれば
そうみえんじゃねw
2017/12/31(日) 20:17:21.07ID:jSVu2Yi+0
つっかかりにくい→つかえやすいorつっかえやすい
それとも
つっかかりにくい→とりつきにくいorとっつきにくい

あんまない→あまりないorあんまりない
2017/12/31(日) 20:22:19.59ID:TCYSbVmxa
読解力ないな
外国人?
2017/12/31(日) 20:26:45.27ID:sT88mvz00
読解力が無かったら修正例は書けないと思う
2017/12/31(日) 21:26:10.60ID:mh0j3eXv0
どこかの田舎もんが書いた文章なんだろ
2018/01/01(月) 08:43:08.79ID:qva7Cn1y0
そんな事にも突っ込まないといけないほど余裕がないんだろうな
2018/01/08(月) 21:07:22.93ID:ff9XOb220
ILMergeについて質問です

例えば自作アプリ X.EXE に外部ライブラリ A.DLL と B.DLL を結合して X2.EXE を作ったとします
この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
2018/01/08(月) 21:23:20.13ID:/QyX6ETP0
>>126
それはILMerge関係なくA.DLL と B.DLL のライセンスの問題です
結合が禁止されていなければ添付して配布するのと同じになります
どんなライセンスかによって違うので
【License】ライセンス総合【利用許諾】
https://mevius.5ch.net/test/read.cgi/tech/1266247461/
へどうぞ
2018/01/08(月) 21:33:00.91ID:7hYpzMEE0
>>126
> この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
各々のライセンスを確認するしかない
2018/01/08(月) 22:13:04.36ID:ff9XOb220
>>127-128
レスありがとうございます
2018/01/31(水) 23:46:33.39ID:3zSQiFnB0
ラムダ式から右辺の情報を取得する事は出来ますか?

.net MVC のソースコードを見ていて思ったのだけど、たとえば razor の Html.LabelFor メソッドは第一引数に
m => m.name などと書いて、引数 m で示すクラスインスタンスの name プロパティの DisplayName 属性の値を
ラベルとして表示していたりします。

ということは、ラムダ式 m => model.name から name プロパティの属性情報を取得しているのだと思うのですが、
どうやってるのかさっぱり分からず。
調べるべきキーワードだけでもいいので、ヒントをいただけませんか。
2018/02/01(木) 01:19:13.10ID:7ACR6glp0
ラムダ式を受け取るメソッドの引数を
Func<String>の代わりにExpression<Func<String>>にしたりする
キーワードは式ツリー
2018/02/02(金) 00:27:05.13ID:eoTWLp2s0
>>131
ありがとー。
軽く見てみましたが、Expression ってよく分からないですね。。
式ツリーでも、もっと調べてみます。
2018/02/13(火) 16:59:47.00ID:KbLCHvlc0
サイズ、位置が固定されているウィンドウを外部プログラムから移動、サイズ変更する方法を教えてください
2018/02/13(火) 20:22:55.89ID:ElvL/+ZbM
とりあえず一般的には
FindWindowやEnumWindowsで目的のウィンドウのウィンドウハンドルを手に入れて
SetWindowPosする
>>133のウィンドウがこれでできるかどうかはそのプログラムの作り次第
2018/02/13(火) 20:56:39.50ID:KbLCHvlc0
>>134
ありがとうございます
それで移動、サイズ変更できないウィンドウをどうにかできないかなと思い質問してみました
ユーザーが移動サイズ変更できないウィンドウでも強引にしてしまうプログラムがあるらしいので、どうしてるのかな?と
2018/02/13(火) 21:00:42.72ID:00bUqpHu0
>>135
とりあえず直接のC#の話でなくWinAPIなんだからそっちで調べた方がいいと思うよ
2018/02/13(火) 21:21:31.71ID:KbLCHvlc0
>>136
ありがとうございます
2018/02/16(金) 06:01:32.86ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
2018/04/09(月) 14:21:53.70ID:hXBdpr6O0
厳密に言うとC#の話じゃないんだけど
TcpClientでコネクション使い回しというか
開けっ放しでデータ送り切るって出来ない?
flushしてもデータ残っててCloseしないと全部送られない
2018/04/09(月) 15:36:40.77ID:Cpp6LEO80
ソースで説明してくれ
2018/04/09(月) 15:51:30.50ID:hXBdpr6O0
そんな複雑な話じゃないんだ
GetStream()でストリーム取ってWrite()するだろ
でもClose()しないとケツのいくばくかはいつまで経っても送られない
断続的に送りたいから、いちいちClose()してからConnect()やり直すとかしないで済む方法あるか知りたい
2018/04/09(月) 15:59:29.12ID:uvdwBq6N0
NoDelay=true
2018/04/09(月) 16:03:49.46ID:hXBdpr6O0
おおサンクスやってみる
144デフォルトの名無しさん (ワッチョイ ffe7-UPLz)
垢版 |
2018/04/16(月) 21:16:34.15ID:f86xegYk0
質問です。

非同期実行について勉強中です。

以下のサイトの内容なんですが、

https://ufcpp.wordpress.com/2012/11/12/asyncawait%E3%81%A8%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E5%88%B6%E5%BE%A1/

ページ中ほどにある
"スレッド プール実行"

"一方、内側は、スレッド プール上での実行になりますが、スレッド プール上のコンテキストではawaitしてもスレッド プール上のどこかで実行されるだけで、決してUIスレッドには戻らなくなります。"
の意味が理解できません。プール上のどこかで何が実行されるのでしょうか?


また、その下の”問題となる書き方の例”

”Task.Runの中のawaitでは、単一スレッド実行にはならないので、lockが必要になることがあります。”

理解が出来ませんでした。

2連続someTask()は同時に実行されるという意味でしょうか?
2018/04/16(月) 21:51:32.37ID:zRE5gkIia
スレッドは使い捨ての領域だから、
その中で遅延実行しても戻り値は受け取れないよ
だって戻る領域が数秒後も存在しているか分からないからね
って意味だと思う
2018/04/16(月) 23:04:11.81ID:qlfABgAK0
マルチスレッドなんて、素人がやるものじゃない。
Ruby を作った、Matz でさえ、何十年もやっていないのに

OS・CPU が今、どのプロセスのどのスレッドの、どの実行コードを実行しているのか、
君のプロセスのスレッドから、わかるわけないでしょ

同期処理じゃないのに。
バラバラに、無関係に動いているのに

逆に言えば、バラバラに動くスレッドの、
現在実行中のコードがわかるのなら、それは同期処理になる
2018/04/16(月) 23:28:22.82ID:pnvSaCZFa
これがシングルスレッドおじさん再登場の瞬間であった
2018/04/17(火) 06:32:51.54ID:/3sDS4fX0
どうもありがとう
2018/04/17(火) 08:18:31.78ID:iJwyhGM3M
シングルスレッドだけで出来る仕事って限られてないか。通信なんか絡んだらマルチスレッド必須でしょう。私の現場は.net3.5なんでback|ground work|er使ってるよ。
2018/04/17(火) 08:24:21.80ID:AgNOdAZLM
>>149
taskって4.0からだっけ?
2018/04/17(火) 10:03:57.21ID:iJwyhGM3M
>>150
確かそうです。
taskとか使えると楽なんですが4.0強制もできない案件なんで。
2018/04/17(火) 10:50:32.95ID:EhGIAhyrd
どうしても.net3.5を使わないといけないんだったらRxで処理するわん
2018/04/17(火) 11:51:31.97ID:iJwyhGM3M
おっ!
いいこと教えてもらった。
Rxってsilverlightだけじゃないんだ。
2018/04/17(火) 12:18:07.14ID:xGjbcgxza
そんなの使えるなら.NET4だって使えるでしょw
3.5が使えて4が使えないプラットフォームは存在しないと思うけど
2018/04/17(火) 12:48:49.14ID:JQ78IAVca
そういう問題じゃないんだよ・・・
2018/04/17(火) 13:03:19.02ID:iJwyhGM3M
お客様のPCがWindows7ならデフォルトで3.5が入ってるでしょう。4.0にしてから使ってくださいとは言いずらい。
2018/04/17(火) 13:07:10.43ID:rojjHsw+0
ちょっと前までUnityも3.5止まりだったから多少はね?
2018/04/17(火) 16:37:52.80ID:joazaAE7M
Rxってなんぞや!!
2018/04/17(火) 17:17:34.43ID:JQ78IAVca
gugure
2018/04/17(火) 19:00:52.03ID:F4BOoGzu0
ググれは正論だけど、せっかく話題になったんだからここの住民の意見も聞いてみたい。使ってる人の感想とか。
2018/04/17(火) 19:14:49.95ID:joazaAE7M
せや!Rxについて詳しく
2018/04/17(火) 19:54:15.01ID:xGjbcgxza
全然関係ないけど、receiveの略が何でRxなのか昔から結構謎
2018/04/17(火) 20:38:22.07ID:F4BOoGzu0
それ組み込みの世界だね。送信ポートはTxだ。スレチだね。
2018/04/18(水) 14:53:40.81ID:ur62Feqwa
インストールされている証明書の読み取り、エクスポートをやりたいんだけどさ
ググるといろいろ出てきてX509とかってのを使うと良いとある
まだ実装とか全然なんだけど、この情報だけだと不安なのでだれかやったことのある人いない?

X509Cartificate.Exportはバイトデータを吐き出してそのままファイルに保存できるるっぽいけど、秘密キーを設定したいとかあったりしてモヤモヤしてる
2018/05/03(木) 18:58:35.37ID:+FWBwd0JM
ワッチョイなしスレが1000行ったからこっちをage
2018/05/03(木) 18:59:21.23ID:+FWBwd0JM
ageられてなかった…
2018/05/04(金) 20:04:32.00ID:hRV05sGM0
windowformアプリケーションで

form1 ディスプレイの解像度等を入力する。入力したデータをもとにform2に表示する長方形の大きさ(rx,ry)を算出
form2 form1で算出した(rx,ry)をもとに長方形を表示

ってしたいんだけど

A. rx,ryをpublicで定義してform2.csから参照する
B. form1のrx,ryを求める計算式をクラスにしてform2からインスタンス生成して求める

のどちらがお作法的に正しいんでしょう?
2018/05/04(金) 20:12:02.30ID:h17LifXxa
データとUIを分離するとして、データ保持と計算用のクラス、formは入力のみ、表示のみって感じになるのかな
でも、まぁそんなのAでもBでもいいだろ

関係ないが解像度ぐらい自動で取得してくれると楽
2018/05/04(金) 20:14:46.22ID:QSaueu9Z0
なんとなく、こういうのを"お作法"と呼ぶマにはいいイメージがない
2018/05/04(金) 20:20:22.68ID:hRV05sGM0
>>168
ありがとうございます。
解像度は自動取得なのでディスプレイのoサイズでした。
2018/05/04(金) 20:22:53.75ID:hRV05sGM0
>>169
すいません。
プログラミング初めて勉強なので、なるべくへんなコーディングしないように可読性高くと考えてまして、
普通はどう描くんだろうなというところが気になって仕方ない。
public変数作りすぎると、後でどこかで変に触るとわけわからんことになるのかなと極力使わないように心がけてます。
2018/05/04(金) 20:37:07.58ID:HEa1U9rI0
何かフリーソフトを作ってみたくて勉強しているところなのですが、GUI?を学ぶ上で良い本があれば教えていただきたいです
2018/05/04(金) 20:55:12.49ID:L0LZvRGB0
>>171
フォームは入力の受付と出力の描画だけをする
内部で使うデータはモデル側で持つ
2018/05/04(金) 21:33:04.91ID:hRV05sGM0
>>173
それでいってみます。
ありがとうございます。
2018/05/04(金) 21:34:38.54ID:hRV05sGM0
連投すいません。

ユーザー側でフォームのサイズを変えたとしても
常にフォーム右端にボタンを固定する方法ってないでしょうか?
2018/05/04(金) 21:39:42.44ID:EvkA5vHv0
>>175
ボタンのAnchorのプロパティをTop, Rightに変更
2018/05/04(金) 22:00:01.60ID:hRV05sGM0
>>176
Anchorって設定があったんですね。
できました!
ありがとうございます。
2018/05/04(金) 22:18:10.81ID:hRV05sGM0
Form1で作成したmethod1をForm2で使用したい場合どのようにすればいいのでしょう?

Form1.method1();

だとエラーなのですが、form自体がクラスだからインスタンス生成が必要ということでしょうか?
本当に初歩的な質問ばかりですいません。
2018/05/04(金) 23:14:52.98ID:hRV05sGM0
駄目だ煮詰まってきた。

Visualstudioで新規ソリューションを作成して、既存のソリューションからフォームを追加したのですが、
フォームデザインでは新規フォームが表示されているだけ、.Designer.csを除くときちんとコードが記載されているのですが、
[デザイン]:の画面では反映されておらず、この画面でコントロールを追加などするとエラーがでてビルドできなくなります。
フォームの追加の仕方が間違ってるのかなぁ。
2018/05/04(金) 23:16:00.99ID:o0wzY09D0
煮詰まる=完成する
2018/05/05(土) 01:05:27.05ID:i9GeFih30
>>179
エラーの内容は?
2018/05/05(土) 08:03:54.33ID:CBIAOUw10
>>181

エラー CS0121 次のメソッドまたはプロパティ間で呼び出しが不適切です:
'InitalMonitorSetteing.InitializeComponent()' と 'InitalMonitorSetteing.InitializeComponent()'

エラー CS0111 型 'InitalMonitorSetteing' は、'InitializeComponent'
と呼ばれるメンバーを同じパラメーターの型で既に定義しています。

です。
2018/05/05(土) 08:08:30.21ID:CBIAOUw10
ソリューションエクスプローラーで
追加→既存の項目
でフォーム一切合切を取り込むと
フォームの[デザイン]タブのところで新規のフォームが表示され、これをいじると上記エラーが出ます。
フォームの[デザイン]タブをいじらなければ正常に実行されます。

.Designer.csを見るときちんとコードが書かれているので
[デザイン]と.Designer.csが一致していない状態になっているようです。
2018/05/05(土) 08:36:55.68ID:CBIAOUw10
地道に

フォームのデザインすべてコピー貼り付け
コードすべてコピー貼り付け

ってやって追加しました。
なんかネットで見ると、

ソリューションエクスプローラーで
追加→既存の項目
でフォーム一切合切を取り込む

ってやると後々まで得体のしれないエラーに悩まされるので、上の方法を推奨している方がいました。
Visual Studioかフォーム自体の持つバグなんですかね…。
2018/05/05(土) 08:47:39.95ID:5nbJxYdYa
〜VS2015しか使ってないが俺はエラー起きたことないよ。原因分からないけど、何かやらかしてるんでしょ
2018/05/05(土) 09:57:21.01ID:+PUGPCx60
無闇にコピペした結果を環境のバグとか
プログラム向いてないよお前
2018/05/05(土) 10:00:36.87ID:CBIAOUw10
失礼しました。
私がよく理解していないために、しなければいけない作業をしていないのかもしれませんね。
2018/05/05(土) 10:35:22.91ID:TTUQSH5zM
むしろしちゃいけない作業をしてるような気がする...
2018/05/05(土) 11:08:14.41ID:T9f+iK/r0
>>178
そもそもこの質問の時点でFormsのコード部分が何をやってるのか理解できてない可能性がある
2018/05/05(土) 11:25:44.32ID:qEM4shRT0
いきなり難しいことをやろうとするとダメやね
2018/05/05(土) 11:27:18.98ID:LtMyhhwZM
基礎も身につけずに一端のフリして解決しようとして、半端で折れるバカってのはよく聞く話

とりあえず何か入門書籍に頼って動くものを作れ
話はそれからだ
2018/05/05(土) 20:20:18.85ID:xedbZMvy0
>>184
情報共有する場所なんだからこういったいいかげんなこと書くのやめてほしいな
まずソースをそのまま取り込みたいのならプロジェクトに追加で何も不具合は起こらない
それでデザイナが反映されないのならDesigner.csを直接書き換え(認識できなくなるような書き換え)やっているはず
あとユーザーコントロールを内部で追加している場合は一度ビルドするとデザイナで反映される
プロジェクトでなくソリューションにソース追加しても当然何も起こらない
最初からふらっとにいけばいいのに
2018/05/05(土) 20:30:34.54ID:Tc8hf/iLa
WinFormのデザイナは中途半端に内部実行するからしょっちゅうトラブるんだよな
コンストラクタでなんかやってる奴は特に要注意
2018/05/05(土) 22:08:57.94ID:1Zee5iE50
デザイナかどうか判断するコードを書くのは飽きた
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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