- 1 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:36:23.74 ID:i1fbuZ/pM.net]
- !extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part95 https://mevius.5ch.net/test/read.cgi/tech/1508168482/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part143 https://mevius.5ch.net/test/read.cgi/tech/1558002486/ ■情報源 https://docs.microsoft.com/ja-jp
- 823 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 09:06:13.84 ID:ikgA/i06d.net]
- C#は1ファイルに全部書けるので必要ないです
- 824 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 10:07:45.04 ID:NnPkuVhE0.net]
- 再利用しないならそれでいいんじゃね?
- 825 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 22:47:27.06 ID:uik+OEWH0.net]
- お前を含めた全人類が未来永劫そのコードに手を加えない保証があるなら好きにすればいい
- 826 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 23:28:58.48 ID:MmWjZkvh0.net]
- ググったらタブ大量にあるような場合>>802がクラス分割のためのメジャーな手法なのね
- 827 名前:デフォルトの名無しさん mailto:sage [2019/09/28(土) 08:43:54.27 ID:uN9Z5b+x0.net]
- 游ゴシックの英数文字をMeasureStringで取得した矩形を使ってDrawStringすると高さ不足で表示されない
矩形を使わなきゃ表示はできるから良いけどもやもやする
- 828 名前:デフォルトの名無しさん mailto:sage [2019/09/28(土) 10:37:47.08 ID:elJniuwU0.net]
- フォント周りおかしいのはMS伝統では
ないだろうか? Q
- 829 名前:デフォルトの名無しさん [2019/09/28(土) 14:09:54.66 ID:51nJyp6ja.net]
- そんなざっくりした話じゃ、どうせお前自身のコードのバグだろって
反応しか返ってこないと思うw
- 830 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 01:52:26.51 ID:sVRG+wNI0.net]
- インターフェイスと抽象クラスってどう使い分ければ良いのでしょう?
ググってもよくわかりません。
- 831 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 02:47:00.08 ID:TNnn17Gh0.net]
- インターフェースなら継承関係のない複数のクラスのように
振る舞うことができる
- 832 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 02:49:22.44 ID:HU0MDVmv0.net]
- 大雑把言えば
プロパティとフィールド(値)を保持するのがクラス クラスのメソッド(挙動)を公開するのがインターフェイス
- 833 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 02:54:07.57 ID:TNnn17Gh0.net]
- それが抽象クラスとなにが違うのだ?と彼は聞いているわけで
- 834 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 03:01:23.20 ID:HU0MDVmv0.net]
- インターフェイスは値を持たないし
原則として挙動の実装も持たせない
- 835 名前:デフォルトの名無しさん [2019/09/29(日) 03:20:49.12 ID:m1n6jIU5a.net]
- >>816
使い分けで悩む必要はないと思うよ。 インターフェイスで目的が達成できるならあえて抽象クラスを使う理由はないのだから。 たぶん使い分けが分からないのではなく、インターフェイスの使いどころが分からないだけじゃないのか。 よくわからなくてもとにかく実際コードを書いて使ってみることが重要。 別に難しい話じゃないので使ってるうちに自ずと分かる。たぶん
- 836 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 03:35:49.46 ID:TNnn17Gh0.net]
- 多重継承的なことがしたくなったらインターフェースを使う
くらいな感じでいいのかもね
- 837 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 07:08:46.93 ID:5VaVy3IA0.net]
- 私もよくわからないんですが、インターフェースって実装内容は問わないけどこの名称のメソッドは用意しなさいよってコトですかね?
インターフェースでメソッドを定義しても、継承したクラスがそのメソッド名に合ってない実装をしてしまったらと考えるとインターフェースのメリットがイマイチピンときません
- 838 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 07:26:53.36 ID:ehZkSMIn0.net]
- 疎結合
- 839 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 08:56:25.44 ID:qdFsd7WD0.net]
- >>823
継承したクラスで変にオーバーライドされたら… なんて気にしたら何も書けなくなるよw それはオーバーライドした奴の責任だから気にしてもしょうがない
- 840 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 09:00:39.96 ID:TNnn17Gh0.net]
- それって抽象メソッドでも同じ事じゃないの
- 841 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 11:47:55.74 ID:YvnTsZym0.net]
- 多態で使うんだよ
用意しなさいってのは発想が逆で、インターフェースに定義されているプロパティなりメソッドなりが実装されていることが保障されていると考える 実際の実装は気にせずに呼ぶ側はインターフェースのメソッドを呼べばいい
- 842 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 11:59:54.10 ID:J9ITXYeqp.net]
- 抽象クラスは重複の排除で使う、インターフェイスはテストする時の視点で必要
クラスAがクラスBの機能を利用する時に クラスAはインターフェイスに対して実装しとけば クラスBの変更に影響を受けないし、 テストする時にクラスBの代わりを作るのがインターフェイス部分だけになる これがもしクラスAがクラスBの抽象クラスに対して実装すると、 クラスAをテストするときに抽象クラスの不要な部分まで要求されてしまう また複数人開発においてもインターフェイスを利用すれば各個人が独立に作業しやすくなる
- 843 名前:デフォルトの名無しさん [2019/09/29(日) 12:01:49.30 ID:3s0zt66kF.net]
- 呼んだはずのメソッドが(インターフェースでは要求されてるのに)実装されてなかったら
コンパイルエラーじゃなくて実行時に例外吐くか unknownmethod()みたいな呼び方してくれると便利
- 844 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:05:37.87 ID:INBbqatbr.net]
- 不便だろ
- 845 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:07:56.33 ID:wmQ9rxKs0.net]
- クラスに由来しない振る舞いを定義するのがインターフェイスとも言えるね。
良く例示される「動物」クラスで考えると。 ・「動物」は動くのだから「移動」メソッドに必然性がある ・だけど「移動」するのは動物だけではない ・いま「移動」と言うメソッドに着目して操作を行いたいとする ・「移動」は動物でも自動車でもロボットでも行う ・でも自動車もロボットも動物ではないのでいからそのメソッドの由来を「動物」クラスに求めるわけにはいかない ・加えて、動物や自動車やロボットに直系する(基底)クラスもない ・故に「移動」メソッドの由来を「動物」クラスにではなく「移動」インターフェイスに求めてみる ・・・的な。
- 846 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:08:06.40 ID:INBbqatbr.net]
- 実行時に例外吐くのはめちゃくちゃ恥ずかしい
コード書いたやつはバカですと言う証明 私はデバッグもできない馬鹿ですで表明してるようなもの
- 847 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:13:32.63 ID:INBbqatbr.net]
- コンパイル時にエラー吐くならそこでデバッグできる
実行時エラーなら全ての場合でエラーがないことを実際に確認しなければならない どちらが便利かわかるだろ
- 848 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 19:29:34.79 ID:TNnn17Gh0.net]
- >>831
いい例えだね 俺も使わせてもらうわ
- 849 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 20:03:13.25 ID:sVRG+wNI0.net]
- 先日、マンガ村の運営者が著作権法違反の容疑で逮捕された。
c# プログラマもマンガ村と同様の共有システムgit等を利用し、マンガやソースをインターネットを通して共有している。 github など分散型のバージョン管理システムを利用している c#プログラマはマンガ村の管理者と同じ位置にいるといえる。単なる利用者ではない。 c# プログラマはマンガ村管理者と同一人物といえるので、著作権法違反の共同正犯として刑務所にぶち込むべき。
- 850 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 22:53:02.75 ID:1CaVkali0.net]
- c#のインターフェイスにはプロパティも宣言できるよね
あれは実質的にはフィールドと同じ様な感覚で使えてしまう
- 851 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 23:37:43.33 ID:uMWzDoEma.net]
- だって>>831のような解釈は時代遅れだし特にC#(というかMS系)では一般的ではないからな
今時は「動物」という一般的実在だろうが「移動できる」という抽象的性質だろうが区別せず、 実装を限定したくない場合は原則常にインターフェイスを使うのが一般的だ 特にMSの場合は顕著で、ほぼ全クラスの全メソッドをインターフェイスに定義するというスタイルを取ることが多いし、またそれを推奨してもいる
- 852 名前:デフォルトの名無しさん [2019/09/29(日) 23:56:27.42 ID:8QPFQcOxa.net]
- ほんとかよそれwwwww
- 853 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 23:59:46.39 ID:k4CvVXqN0.net]
- >>837
初心者スレで珍妙な独自理論を一般的だなんて教えるのはやめれ
- 854 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 00:22:33.73 ID:LVz3OUV70.net]
- 今年始めた初心者だが
クラスが大カテゴリ メソッドが小カテゴリ インターフェースが小カテゴリらの存在を保証する中カテゴリ このくらいの認識しかなかったわ
- 855 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 00:32:45.02 ID:C9eDYcBn0.net]
- 宣教師と見た
次にスクリプト言語を薦めて来るぞ
- 856 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 00:57:12.69 ID:PJtB8DfJ0.net]
- 831 だけど
- 857 名前:B
複数のクラスインスタンスの動的読み込みとか始めるとそんな感じになることもあるよ。 プラグインとかの識別に便利だし。 そうだとしても、たぶん 831 の1行目と矛盾してないでしょ。 ただ初心者相手の説明にこんなこと言いだしたら収拾がつかなくなるし、 全メソッドをってのは、まあ頑張ってな、と返すしかないけど。 [] - [ここ壊れてます]
- 858 名前:デフォルトの名無しさん [2019/09/30(月) 01:48:44.79 ID:dOfJdIlZ0.net]
- すまんが、エラーメッセージにあるカッコ内の行番号らしきものってさあ
片方は間違ってる行っぽいけど、もう片方は一体何なんだぜ?
- 859 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 02:02:42.92 ID:zBUNKmmLa.net]
- >>843
その行の何文字目かって意味 例えばファイル先頭に「int a = "";」と書いたら(1,5,1,6)でエラーが出るけど これは「1行目5文字目〜1行目6文字目」の箇所でエラーになっていることを表している
- 860 名前:デフォルトの名無しさん [2019/09/30(月) 02:09:52.87 ID:dOfJdIlZ0.net]
- >>844
ありがとう!何文字目かなんて全然わかんなかったよ
- 861 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:08:24.00 ID:fD1lXHN30.net]
- 質問いいですか?
- 862 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:10:26.75 ID:ws0x1Tjj0.net]
- >>846
駄目です
- 863 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:17:51.94 ID:nNBu0V63d.net]
- >>847
その返しはこのスレではいかんだろ(笑)
- 864 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:41:05.60 ID:bmAzH1750.net]
- トイレ行ってきていいですか?
- 865 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:55:42.37 ID:BmNMZ9TsM.net]
- もう居るだろう
- 866 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 09:29:49.98 ID:fD1lXHN30.net]
- では質問しますね
Timerコンポーネントで Timer1.Interval = 5000;とすると、プログラム起動後5秒後に初めてTimer1_Tickが 実行されますよね、これを起動時に1度実行したいのですがどうしたらいのでしょうか Form1_Loadに書けばいいような気がしますが引数がわからない
- 867 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 09:31:40.04 ID:Q4pocwaT0.net]
- 忘れたけどTimerってTimers.TimerもThreading.Timerも大体どんな種類の奴でも最初のディレイタイム指定できなかったっけ?
- 868 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 09:58:04.89 ID:fD1lXHN30.net]
- >>852
レスサンクスです Delayでぐぐってみましたが、プログラムを遅延させるほうのDelayばかりヒットして なかなか見つかりません、Timerのプロパティにそういうなのがあればいいんですが
- 869 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 10:05:34.65 ID:g7w6SBZq0.net]
- >>853
処理を関数化しておいて、コンストラクタから呼んだらいいんじゃね? 別にタイマーから呼ばなくてもいい
- 870 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 10:13:21.52 ID:e45pyL0lM.net]
- >>851
最初100で、中で則5000書き換えじゃあかんかったっけ
- 871 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 10:40:02.13 ID:fD1lXHN30.net]
- >>854
サンクスです Timer1_Tickの中の処理をゴソっと別にうつすんですか、確かにうまくいきそうですね >>855 さんくすです Timer1.Interval = 100;からTimer1.Interval = 5000;に変更ですか これもうまくいきそうですね、厳密な秒数は必要じゃないですし
- 872 名前:デフォルトの名無しさん [2019/09/30(月) 10:47:03.32 ID:ZcJV4ZEKa.net]
- >>851
どんな方法使ってもいいけど後で読んだ時に何をやってるか 分かりやすいのが一番だね public Form1() { InitializeComponent(); Form1.Load += (sender, e) => OnEvery5Seconds(); Timer1.Tick += (sender, e) => OnEvery5Seconds(); } void OnEvery5Seconds() { ..... } こうやった場合、FormのLoadイベントより前にOnEvery5Secondsが呼ばれる可能性が あることは注意する必要がある。(実際にはないと思うけど)
- 873 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 11:16:30.25 ID:fD1lXHN30.net]
- >>857
れすさんくすです なるほど、こんな書き方もできるのですね、うまくつかえばすっきりまとまりそうです
- 874 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 23:02:09.82 ID:S0uOX3sP0.net]
- >>852
流れから推測するとたぶんWindows.Forms.Timerクラスだね
- 875 名前:デフォルトの名無しさん [2019/10/02(水) 01:49:10.77 ID:4PgWnh+40.net]
- 非同期メソッドでちょっとだけ同期処理するのにはどうすれはいいのですか?
async Task ABCasync(){ ABCasyncの呼び出し元には、終わるまで待っていてもらいたい処理(); //ここでtaskで呼び出し元に何かを返せたりするのかしら? ABCasyncの呼び出し元には、待っていてもらう必要のない処理(); }
- 876 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 02:14:39.18 ID:mDEdylW50.net]
- 強引に実装することは可能だがメソッド分割すべき
- 877 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 07:28:12.15 ID:YugGu4Uj0.net]
- クラスは知識
メソッドは機能 という認識は事のほか難しいんけ?
- 878 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 08:07:26.42 ID:Vm3TcWW10.net]
- >>862
そういう一般的でもない訳のわからない解釈を出されても、普通の人には理解できないかおかしな理解のまま突き進むことになるだろう
- 879 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 08:15:53.12 ID:gR9x9lAq0.net]
- クラスは学校とかのクラスって認識でいい
- 880 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 11:07:45.90 ID:9X+f8gXkr.net]
- ゲームのクラスの方がわかりやすい気がする
戦士 魔法使い 僧侶 盗賊 それぞれできることが違う
- 881 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 11:18:19.95 ID:VgxhRvTXp.net]
- あはは、まあ、学校のクラスだと対抗戦が出来るくらいに似たり寄ったりだから意味が分からないよな。
- 882 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 11:59:15.15 ID:8UOZigmra.net]
- 逆に、同一のクラスの異なるインスタンスなんてのもできないしね。
- 883 名前:デフォルトの名無しさん [2019/10/02(水) 12:12:09.33 ID:VOEDuxVKM.net]
- >>865
じゃぁ男女別は? どっちのクラスが上位なの? それとも同格で、男戦士 女戦士ってなるの? 半魚人タイプとか4足系の戦士は?
- 884 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 12:26:49.61 ID:9X+f8gXkr.net]
- 出来ることが変わらないなら基本変えなくていいよ
設計次第だけど 質問の内容の男戦士と女戦士で何が違うのかはっきりしない 力などの属性値(プロパティ)だけが違うなら分ける必要はないわな 半漁人でも4足系の戦士でも数値しかかわらないなら同じ コードが共通になるなら基本的に分けなくてもいい
- 885 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 19:59:53.93 ID:dZRRj/1Z0.net]
- 強引に何かに例えるよりコード書いてみた方がいいよ
- 886 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 20:20:25.32 ID:IV023jBj0.net]
- C#はじめて最初の日に読み飛ばすところで議論しても不毛だよな
>>870に賛成
- 887 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 00:57:21.26 ID:z1GHd6rla.net]
- 質問です
工場とかインフラの制御ソフトモドキを成果物としてWindowsアプリケーションの形式でC#で作りたいんですが、この2冊終わった後にWindowsアプリケーション開発の本買うなら何が良いですか? また、本が時間の無駄だとしたらどこのサイトを参照すれば良いですか? 上記の件よろしくお願いしますm(_ _)m 1冊目 なるほどなっとくC#入門 2冊目 C#プログラミングのイディオム/定石&パターン
- 888 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:02:05.17 ID:t45ZyD0e0.net]
- そりゃ一番はMicrosoftのチュートリアルでしょ
https://docs.microsoft.com/ja-jp/visualstudio/ide/step-1-create-a-windows-forms-application-project?view=vs-2019
- 889 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:16:35.63 ID:z1GHd6rla.net]
- >>873
ありがとうございますm(_ _)m
- 890 名前:デフォルトの名無しさん [2019/10/03(木) 01:19:35.07 ID:pRlPv1jza.net]
- >>872
FormならGUIの作り方は必用なことをググって調べながら実際に作ってみるのが一番。 本は1冊以上は読むだけたぶん時間の無駄。 何かを制御するなら、それが大企業の製品で.NET用のライブラリが用意されているのでない限り たぶんアンマネージドの知識が必要になる。 これは多分本はないので自分でググって調べる あと多分非同期処理は必須。 最初.NET1.x時代の生のThreadとか使う記事に軽く目を通して、 その後は今時のTPLや非同期メソッドの記事を読めばいい。 本もあるけどたぶんweb上の記事で十分
- 891 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:26:24.07 ID:wBmuAStK0.net]
- 非同期メソッドの実行自体は慣れたけど
win10のアップデート強制再起動時に 非同期処理中のタスクをきちんと終了させる方法がわからん 突然書き込み中のファイルがぶっ壊れそうで怖いわ
- 892 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:35:18.06 ID:z1GHd6rla.net]
- >>875
ありがとうございますm(_ _)m
- 893 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:39:57.58 ID:dygVDi5Yd.net]
- >>875
工場の制御ってRS-232CとかPLCとかGPIBとかやろ 別にアンマネージド必要ないだろ
- 894 名前:デフォルトの名無しさん [2019/10/03(木) 01:45:45.89 ID:pRlPv1jza.net]
- >>878
そうかもしれないけど拡張ボードの型式でライブラリはアンマネージドdllだけかもしれない。 USB接続でアンマネージドdllの可能性もある 何とも言えない
- 895 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 15:11:12.65 ID:xDvwVpv4p.net]
- マネージドなドライバーが無いなら使わないって選択をだな。
- 896 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:33:07.86 ID:65+5RZIm0.net]
- UI操作とawaitを使った非同期メソッドをまとめたasyncメソッドを別スレッドから呼び出すにはどうすればいいですか?
- 897 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:36:08.92 ID:XDm3DYNpd.net]
- >>881
??何が聞きたいの?
- 898 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:42:35.24 ID:65+5RZIm0.net]
- >>882
すみませんでした。 例えばこういう感じのメソッドを別スレッドから呼び出す方法を教えてください。 async Task DoSome() { label1.Text="処理中..."; await DoLong(); label1.Text="完了"; }
- 899 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:27:59.44 ID:AKImZpfb0.net]
- 正直設計を考え直した方がいいけど
メインスレッドで動作してる間に TaskScheduler.FromCurrentSynchronizationContext() でTaskScheduler確保しておいて、その"別スレッド"内で new Task(() => DoSome()).RunSynchronously(taskScheduler) する
- 900 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:48:28.97 ID:Cd3mzBuJ0.net]
- こうじゃダメなの?
Invoke((MethodInvoker)(async () =>DoSome()));
- 901 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 22:23:35.99 ID:Y5r0apvPr.net]
- 呪文化しただけにも見える
- 902 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 00:31:32.74 ID:hyuh0V300.net]
- メソッド側を修正する必要があるけど、
こういうことでは? 別スレッドからのUI操作 https://qiita.com/mounntainn/items/8a2b4f1cf47bd02657f3
- 903 名前:デフォルトの名無しさん [2019/10/04(金) 01:26:24.02 ID:oVLixzTMa.net]
- >>883
やっぱりそういうのは非UIスレッドからも呼び出せるようにする、ではなく、 逆に普通にUIスレッド専用のメソッドとして提供して、 もし必要ならXMLコメントとかで「UIスレッド以外からの呼び出し禁止」って 明示するのが筋なような気がするw
- 904 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 09:42:07.42 ID:7JHQ1IR60.net]
- >>884
>>888 filesystemwatcherのハンドラから呼び出すと別スレッドからの呼び出し扱いになってしまいます。
- 905 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 09:50:12.44 ID:K3mQ1Iatp.net]
- まあその用途ならやっぱコントロールのInvokeの中で呼べばいいだけの話しだな
DoLongの中でさらに入り組んでるとデッドロックしそうだけど
- 906 名前:デフォルトの名無しさん [2019/10/04(金) 14:31:48.61 ID:RxmXvWZXa.net]
- こんなの考えてみたが、あんまり便利でもないなw
private bool TryOnUIThread<T>(EventHandler<T> eh, object sender, T e) where T:EventArgs { if (!InvokeRequired) return false; Invoke((Action)(() => eh(sender, e))); return true; } private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e) { if (TryOnUIThread(FileSystemWatcher_Changed, sender, e)) return; var t = DoSome(); }
- 907 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 15:21:51.76 ID:5G6hsRzp0.net]
- FileSystemWatcherはSynchronizingObject持ってんじゃん
設定しとけば勝手にBeginInvokeでイベントハンドラ呼んでくれるよ
- 908 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:15:38.99 ID:hjSAU91p0.net]
- 質問なんですが
設定ってどこにどうやって保存してますか? .configが今ならベストなんでしょうが、保存先が C:\Documents and Settings\UserName\Local Settings\Application Data\ になり、.iniのように、アプリをコピーで2つの設定が使えるようになりません .configはファイルの場所が遠くて変更しにくい、iniは古くてC#で扱いにくい どうしてますか?
- 909 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:23:45.47 ID:BObIlSOA0.net]
- >>893
インストールするアプリはユーザーデータフォルダのどっかに保存しないと駄目じゃん どこでも置けるやつはexeと同じ階層に設定ファイルあったほうが使いやすいじゃん ってだけしか気にしたことない
- 910 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:30:58.10 ID:hjSAU91p0.net]
- >>894
れすさんくすです 確かにそのとおりだとおもいます インストーラーではなく、ZIPとかで配布で、ちいさなアプリで、主にシングルユーザーで ってなると.iniになるんでしょうか?
- 911 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:31:02.26 ID:elsuYLim0.net]
- >>893
設定を保存するクラスを作って、xamlかjsonにシリアライズ アプリのコピーで使い分けるなら、保存場所はアプリのexeと同じフォルダー
- 912 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:34:16.80 ID:BObIlSOA0.net]
- >>896
xmlとjsonなんて編集できるツールあるの? パンピーにインデント壊さないでねなんて無理よ
- 913 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:43:34.43 ID:elsuYLim0.net]
- >>897
元の質問に設定ファイルを手動で編集したいなんて書いてないが
- 914 名前:デフォルトの名無しさん [2019/10/05(土) 10:47:20.84 ID:xk/GxZ7j0.net]
- jsonもxmlもインデント関係ないから自由にさせろ
強制したいならyaml使え
- 915 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 12:25:09.61 ID:8Jk2Tveb0.net]
- >>897
インデントわろた
- 916 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 12:42:35.73 ID:sqkLDT76d.net]
- >>897
インデントwwww
- 917 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 15:47:01.45 ID:BObIlSOA0.net]
- インデントっていうかカッコの対応?
でもその一点でxmlとjsonっておよびじゃ無くない? これらを使うなら設定ツールが必要になると思う
- 918 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 16:03:44.47 ID:8Jk2Tveb0.net]
- よく出てこれたな
- 919 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 16:30:09.26 ID:BObIlSOA0.net]
- >>903
何度でも言えるよ xmlとjsonは設定ツールがないと使えないゴミ
- 920 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 16:44:26.62 ID:LN1PiSPK0.net]
- 設定画面ぐらい作れよ
- 921 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:02:10.69 ID:8Jk2Tveb0.net]
- >>904
よおインデント
- 922 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:07:55.98 ID:hjSAU91p0.net]
- >>896
れすさんくす 結構ハードなことやってるんだね、一度クラス作ったら一緒か
- 923 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:16:21.03 ID:q6cvuv6U0.net]
- >>906
よおインシデント
|

|