[過去ログ] ふらっと C#,C♯,C#(初心者用) Part137 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
1: (ドコグロ MM07-2FKJ) 2018/04/06(金)17:40 ID:oKXVP34zM(1/2) AAS
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part95
2chスレ:tech
C#, C♯, C#相談室 Part93
2chスレ:tech
■前スレ
ふらっと C#,C♯,C#(初心者用) Part136
2chスレ:tech

■コードを貼る場合は↓を使いましょう。
外部リンク:ideone.com
外部リンク:dotnetfiddle.net

■情報源
外部リンク[aspx]:msdn.microsoft.com
外部リンク:docs.microsoft.com
外部リンク[aspx]:msdn.microsoft.com
外部リンク:referencesource.microsoft.com VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
973
(1): (ワッチョイ 4aeb-xcqf) 2018/06/04(月)21:48 ID:9+XsYcyB0(1) AAS
Windows.Forms で WndProc を override して自分のコードを加えているのですが
デバッガで進めていくと、その中に突入してしまいます。

InitializeComponent の中みたいに、デバッガが入らなくする宣言みたいなものなかったですか?
974: (アウアウウー Sa09-CKCa) 2018/06/04(月)21:49 ID:BHtXacEqa(1) AAS
>>973
debuggerstepthrough
975
(1): (ワッチョイ b117-NLsb) 2018/06/04(月)21:56 ID:Uz3WpYRO0(1) AAS
>>970
Mono Releases | Mono
外部リンク:www.mono-project.com
976
(2): (ワッチョイ 4e8b-fUxx) 2018/06/04(月)23:32 ID:054Q3E4O0(1) AAS
メインクラスとシリアル通信クラスの2つを使っています
シリアル通信の受信完了でイベントをメイン側に発生させることら可能でしょうか。受信完了したらメイン側から受信データを取りに行くようにしたいのですが。
977
(1): (アウアウエー Sa22-UB1l) 2018/06/05(火)00:07 ID:jE9yEXCCa(1) AAS
>>976
何でそうなるのw
発想が逆だってw

そのシリア通信を担当するクラスSがデータ受信を通知するイベントを発生させて
受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ついでに言えば受信データもEventArgs使って渡してしまえばいい
978: (ワッチョイ d681-gTal) 2018/06/05(火)00:33 ID:liKML/cX0(1) AAS
しょうがねえだろ初心者なんだから
979
(2): 976 (ブーイモ MMbe-fUxx) 2018/06/05(火)07:18 ID:ByFVOB9IM(1) AAS
>>977
やりたいのことはそれなんですよw
説明が下手ですいません
厳密にはデータを受けた事が分かったらメイン側は受信データの内容を解釈するクラスに送って処理分岐という形にしようかと思ってます。
用語や処理の知識がおいついてきてないので、あれを応用しようという感じにならず、調べるためのキーワードも出てこないです。

>>クラスSがデータ受信を通知するイベントを発生させて受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ここが具体的にどういう構文になるのでしょうか。
980
(1): (アウアウカー Sa5d-GynM) 2018/06/05(火)08:07 ID:D4M8TybKa(1) AAS
Signalを使っても作れるな。
981: (ワッチョイ fa11-W/zB) 2018/06/05(火)09:11 ID:GjVlFAo70(1/2) AAS
>>958
PCをあまり使い慣れてない人とか、ボタンはシングルクリックでいいのをダブルクリックしちゃったりとかあるんだよなこれが・・・
982: (アウアウカー Sa5d-SvXf) 2018/06/05(火)09:29 ID:nr/+sOXHa(1/2) AAS
非同期じゃないならボタンイネーブル切ればいいだけじゃね
983: (アウアウカー Sa5d-SvXf) 2018/06/05(火)09:32 ID:nr/+sOXHa(2/2) AAS
すまん。忘れてくれ
984: (アウアウウー Sa09-NLsb) 2018/06/05(火)10:35 ID:l/0/VM/ma(1) AAS
状態をGUIだけに持たせておくのはおかしいといつか思うはず
985
(4): (アウアウエー Sa22-UB1l) 2018/06/05(火)12:11 ID:vCTdp4Eha(1/4) AAS
>>979
class FrameReceivedEventArgs:EventArgs
{
  public byte[] Frame{get; private set;}
  ....
}

class CommunicationPort
{
  public even EventHandler<FrameReceivedEventArgs> FrameReceived;
  ....
}

class FrameDecoder
{
  public FrameDecoder(CommunicationPort c}
  {
    c.FrameReceived += CommunicationPort_FrameReceived;
  }

  private void CommunicationPort_FrameReceived((object sender, FrameReceivedEventArgs e)
  {
    ....
  }
  ....
}
986
(1): (ブーイモ MMbe-CKCa) 2018/06/05(火)12:44 ID:eGZjT6RJM(1/2) AAS
>>985
引数に渡されたものを弄るのは行儀の悪い設計
IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、
>>979の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい
987: (ブーイモ MMbe-CKCa) 2018/06/05(火)12:51 ID:eGZjT6RJM(2/2) AAS
>>985がなぜ行儀が悪いか補足しておこうか
普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する
ところが、>>985だとそれが逆なんだよ
new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ
988
(1): (アウアウエー Sa22-UB1l) 2018/06/05(火)12:55 ID:vCTdp4Eha(2/4) AAS
何言ってるのかさっぱりわからん
よくわからん思考回路だな...
989
(1): (ワッチョイ fa11-W/zB) 2018/06/05(火)13:09 ID:GjVlFAo70(2/2) AAS
言い回しがようわからんが
>>985みたいなのするのが解放されないオブジェクトを量産するっていうのはなんとなくわかる
990
(1): (アウアウウー Sa09-CKCa) 2018/06/05(火)13:11 ID:vyKZFDS5a(1) AAS
>>988
分からないならイベントというものを正しく理解してないんじゃないかな
ボタンのクリックイベントをフォームが受け取れるのは、ボタンがフォームへの参照を(実際には間にデリゲートが入るので間接的にだが)持ってるから
基本的に、引数に渡ってきたものに自分自身を登録するのは避けたほうがいい
オブジェクトのライフタイムが非常に分かりにくくなるから
991: (ワントンキン MM8a-67BG) 2018/06/05(火)13:53 ID:UBCugO63M(1) AAS
reactive extensionsって.NET発祥なのに使う人少ないよね
992: (ワッチョイ cd24-lkdC) 2018/06/05(火)15:23 ID:n583dJR10(1/3) AAS
>>969
ちょまど神って???状態でしたので調べてみました。
一つ知識が増えました。ありがとうございます。
993
(1): (ワッチョイ cd24-lkdC) 2018/06/05(火)15:24 ID:n583dJR10(2/3) AAS
>>970
そうなんですか。。。
NET Coreっての調べてみます。どうも有難う御座います。

ちょど昨日 GUI って何だ??って検索したばかりでした。
3日前からプログラムの勉強をはじめたばかりで。。。
994: (ワッチョイ cd24-lkdC) 2018/06/05(火)15:24 ID:n583dJR10(3/3) AAS
>>975
ありがとうございます。TRYしてみます。

この掲示板すごーい!!皆様に感謝です。
995
(1): (アウアウエー Sa22-UB1l) 2018/06/05(火)16:15 ID:vCTdp4Eha(3/4) AAS
>>989
ないないw
イベントの購読解除はリークの原因になるのはその通りだけど、
それは>>986が主張するように、イベントを発生するオブジェクトを引数で受け取ったかどうかと無関係。

>>990
俺は理解してないのは君の方だと思うよw
その君のいう俺様ルール、何が悪いのかさっぱり分からない

そもそも今はそんな話をしてるんじゃないw
単に質問者の参考になるかもしれんコードの骨組みを示しただけw
996: (アウアウエー Sa22-UB1l) 2018/06/05(火)16:16 ID:vCTdp4Eha(4/4) AAS
あ、

× イベントの購読解除
〇 イベントの購読解除忘れ
997: (ワッチョイ d69a-msj4) 2018/06/05(火)19:31 ID:70UTtyrn0(1/2) AAS
次スレたててみる
998
(1): (ワッチョイ d69a-msj4) 2018/06/05(火)19:33 ID:70UTtyrn0(2/2) AAS
ふらっと C#,C♯,C#(初心者用) Part138
2chスレ:tech
たった
議論は他のところでよろしく
999: (アウアウウー Sa09-CKCa) 2018/06/06(水)00:18 ID:+J9HGVUKa(1) AAS
>>995
想像力のない人だなあ
>>985だと、イベントハンドラの登録を解除しない限り、FrameDecoderが不要になっても
登録先のCommunicationPortよりも先にGCされることは絶対にない。
じゃあ不要になったらイベントハンドラを登録解除できるようにしよう。いつ解除する?
それはFrameDecoder自身には分からない。知っているとしたら、それは>>976のいうメインクラスだろう。
登録解除するにはFrameDecoderクラスのDisposeメソッドを呼べ、という仕様にするか?
結局、985のFrameDecoderを正しく扱うには、メインクラス側がそういうクラス外から見ただけでは想像できないFrameDecoderの気難しい仕様を理解した上で、
必要に応じて明示的な解放を行わなくてはならない。
そんなことをするくらいならメインクラス側で明示的に登録・登録解除をやったほうが遥かに素直で分かりやすい。
1000: (アウアウカー Sa5d-SvXf) 2018/06/06(水)00:26 ID:D75pa1n0a(1) AAS
質問いいですか?
1001
(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 60日 6時間 46分 14秒
1002
(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。

───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
外部リンク:premium.5ch.net

▼ 浪人ログインはこちら ▼
外部リンク[php]:login.5ch.net
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.027s