[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/08 11:46 / Filesize : 273 KB / Number-of Response : 1029
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2018/12/15(土) 11:07:07.89 ID:0aSEF/I+0.net]
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1538646998/
■コードを貼る場合は↓を使いましょう。
ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

830 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 11:55:58.09 ID:mmBt6tnL0.net]
>>804
MessageBox.Show("PrintScreenボタンを押せろください");

831 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 16:07:58.46 ID:n2t8JUOl0.net]
Cでは数値型変数を複数の場所から参照するためには、変数のポインタ得てそれを使いますが
C#ではポインタ無いんで、数値フィールド持つクラスを作って
そのインスタンスから参照するしか無いんですか?

832 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:01:04.63 ID:dfsqwbBrd.net]
別にポインタはあるぞ。
行儀わるいから、使うべきかよくかんがえたほうがいいだけ。

833 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:01:47.04 ID:mSWYdTC80.net]
>>808
スカラー型なら直接読み書きすれば良いのでは無いかと思いますが…配列なら参照型です
変数参照を扱うなら強化されたrefやoutを使えます、またunsafeだとポインタも使えます
TypedReferenceというのも有りますがコレを扱うための__makerefなどは些かアレなので…

.NETには値参照用のSystem.Runtime.CompilerServices.StrongBox<T>などジェネリック既存型も有ります

834 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:09:27.87 ID:eqms90yHd.net]
定数参照的な話?

835 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:11:36.23 ID:PR5Tb5Rba.net]
>>808
Cでもスコープ内の変数は普通に読み書き可能。
スコープ外の変数でもその値を引数として関数に渡すことができる
ポインタが必用になるのは変数を書き換える汎用的な関数を書く場合だけ
C#の場合、同じことはrefやout付きの引数で実現できる

836 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:20:05.45 ID:d5pUUzr/0.net]
nn-hokuson.hatenablog.com/entry/2017/08/17/200918#%E3%83%9C%E3%83%BC%E3%83%AB%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B
個々のサンプル通りにゲームを作成中なのですが、paintイベントハンドラってなんでしょうか
paintというイベントは何によって発生するのかよくわかりません

837 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:27:37.84 ID:NXeshUsvp.net]
>>813
> paintイベントハンドラってなんでしょうか
描画をするためのハンドラです

> paintというイベントは何によって発生するのかよくわかりません
描画をしたい時に発生します

838 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:31:08.38 ID:d5pUUzr/0.net]
↑描画とはどういう操作のことでしょうか?
フォームがロードされた時点で実行されます



839 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 17:37:19.60 ID:NXeshUsvp.net]
>>815
ゲームの場合は勝手に描画が実行され続けます

840 名前:デフォルトの名無しさん mailto:sage [2019/02/16(土) 18:16:49.35 ID:d5pUUzr/0.net]
↑自動的にですか
ありがとうございます

841 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 12:34:21.09 ID:Cn2cXppc0.net]
using System;
public class Hello{
public static void Main(){
// Your code here!

private void myfunction(){
Console.WriteLine("jfo

842 名前:asd");
}

myfunction();

}
}

paizaでC#を入力するとエラーが出るのですが、どこがおかしいですか?
private voidの部分が予期されていないというエラーが出ますね
https://paiza.io/ja
[]
[ここ壊れてます]

843 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 12:38:27.42 ID:51VRzV3m0.net]
staticな関数から動的な関数を呼び出してるんじゃない?

844 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 12:59:41.60 ID:j6Gi9YSR0.net]
ローカル関数をサポートしてないだけでしょ

845 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 13:00:14.76 ID:I+dbukVsp.net]
>>818
private voidの部分がおかしいですね

846 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 14:31:14.74 ID:cAaLtQSp0.net]
>>818
まずこういう質問はpaizaの問題でC#のスレでやられても混乱するからVisualStudioでの話以外はやめてくれ
コード書けるサイトが間違っていないって保証が無い。実際動くコード転載してもエラーって何度も経験しているからな
VisualStudioで書くのならターゲットフレームワークを.Net4.7以上にしてprivate void myfunction()からprivate外してvoid myfunction()で動く

847 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 16:38:09.76 ID:Agaj4T0x0.net]
たすけて!これ何が違うの?
どっちも普通に使えるよね?
ちな初心者
@List<T> list = new List<T>();
AList<T> list;

848 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 16:55:04.91 ID:2ynU5zYy0.net]
後者は中身が無いからそのままじゃ使えない



849 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:04:55.99 ID:KqlDIF5Pa.net]
>>823
1はlistという変数の定義と同時にList型のインスタンスで初期化している、普通に使える
2はlistという変数を定義しただけの状態
ローカル変数の場合は後で初期化する必要がある、未初期化のまま使おうとするとコンパイルエラー
クラスや構造体のフィールドの場合は暗黙でnullで初期化される、「普通に使う」ためには後でList型インスタンスを代入してやる必要がある

850 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:07:18.00 ID:naWxhgEk0.net]
>>823
> @List<T> list = new List<T>();

List<T> list;
list = new List<T>();
と同じ

> AList<T> list;
はlistの実体が設定されてないからそのままlist.Add(…)とかやると例外が発生する

851 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:07:30.92 ID:B/nvmulQd.net]
>>822
.NETのバージョンなにか関係あるか?

852 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:12:13.37 ID:tKx1WgvG0.net]
>>823
C++と違ってクラスは強制的に参照型で変数宣言がポインタと同等なのよ
宣言だけではコンストラクタはもちろんインスタンスも割り当てられない

853 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:26:45.23 ID:Cn2cXppc0.net]
>>822
paiza だと挙動が少し違うようです
このサイトはやめときます

854 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:35:39.94 ID:Cn2cXppc0.net]
ちょっとコードを確認したいというときに、使えるツールありますか?
わざわざプロジェクト作るほどではないときですね
python のidleのようなものです

855 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:38:44.31 ID:Ox4HquXb0.net]
>>830
C#インタラクティブ

856 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:41:30.40 ID:0sFVNd3o0.net]
cscは標準で入っているでしょ

857 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 17:54:52.02 ID:B/nvmulQd.net]
>>830
LINQPad

858 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 18:01:37.03 ID:/k3HmPSI0.net]
csiだな



859 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 18:03:11.00 ID:owh3i+7dM.net]
スクリプトみたいに対話型でできる?

860 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 18:18:26.04 ID:Cn2cXppc0.net]
↑ありがとうございました

861 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 18:21:23.19 ID:naWxhgEk0.net]
>>830
notepad.exe + csc.exe

862 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 18:28:37.10 ID:Agaj4T0x0.net]
>>825
>>826
>>828
NEWはしなきゃいけないのね
有難う御座います

863 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 18:29:26.69 ID:Cn2cXppc0.net]
>>833
これいいっすね
初心者なのでしばらく練習します

864 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 20:45:16.60 ID:Cn2cXppc0.net]
vs codeもちょっとしたコードの確認に使うものなんでしょうか?

865 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 21:29:49.15 ID:I+dbukVsp.net]
>>840
使うひともいれば使わないひともいますね

866 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 01:50:55.38 ID:pxm+KTrW0.net]
入力項目が沢山ある画面で、変更を保存せず画面を閉じようとしたときは警告を出したいです。
何も変更せず画面を閉じる場合は警告を出さずに閉じたいです。

この場合の変更チェックは入力項目に紐づく変数1個1個をチェックする以外に、スマートな方法は無いでしょうか?
入力項目に紐づく変数はデータクラスとして用意しているので、画面開く直前にハッシュのようなものを計算し退避しておき、
画面を閉じる直前にハッシュを再計算し比較すれば行けると思うのですが、オブジェクトのハッシュを求めるのは
GetHashCodeでいいのでしょうか?

867 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 01:58:21.05 ID:0Vx/m/dz0.net]
ないね
上に1dot
下に1dot
って動かされて終了したときは
出したくないんでしょ?
何か妥協点がない限り全部比較するしかないよ

868 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 02:13:28.99 ID:Y8U6L+e90.net]
>>842
データクラスとして纏めてあるなら、GetProperties()やGetFilelds()で抽出した各変数を
ループで比較すればそこそこスマートなんじゃない。



869 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 02:29:46.98 ID:GC8vaMYY0.net]
俺ならデータクラスにINotifyPropertyChangedを実装するかな

870 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 02:53:09.62 ID:+SQV8UeVa.net]
>>842
直接の回答でなくてごめん。

そういうMSにありがちなUIはたぶん

(1) 変更をキャンセル可能であること
(2) OKボタンをクリックした時点で初めて変更が反映されること

が要件になってるからそういう仕様になるんだと思うけど、こんな要件が必用ないなら
画面の入力項目の変更を変更があった時点でその都度対応するオブジェクトの
プロパティーに反映させてしまえば、「変更を保存せず画面を閉じようとしたときは警告を出」す
必用自体がなくなる

まあ一種の手抜きだけど、場合によっては許容される手抜きだと思う

871 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 03:23:01.21 ID:pxm+KTrW0.net]
>>845
いいアイデアですね。
プロパティ1つ1つに
if(beforeValue!=afterValue)
 OnPropertyChanged();
みたいな実装が必要なのが若干だるい気がしますが。

>>846
つまり変更した瞬間に即確定って意味でしょうか?
後出し情報で申し訳ないですが、最終保存先がDBで
アプリにとって比較的重要な情報の更新をしようとしています。
なるべく意図しない変更を防ぎたいです。

872 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 08:27:54.30 ID:GC8vaMYY0.net]
>>847
データクラスのベースクラスをPrism.MvvmのBindableBaseにするとまあまあタイプ量減らせたりするよ

873 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 11:29:03.32 ID:huM3ZKfN0.net]
https://i.imgur.com/2rpwFqg.jpg
vs codeを使っているのですが、どこから実行できるんでしょうか?
言語はc#で、マイクロソフトのc#のアドオンを入れました
ctr shift pでrunというコマンド?が出てくるので、それをクリックしたのですが、outputには何も出ません

また、ヴィジュアルスタジオの場合はイベントハンドラーがありますが、常に実行させるようなイベントというのはただのC#にあるんでしょうか?

874 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 11:34:39.00 ID:FChOt/Xad.net]
>>849
チュートリアルくらいやれよ

875 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 12:06:26.29 ID:RBxZ7FEaM.net]
>>849
ターミナルでdotnet runと打ち込んでEnterや

876 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 12:13:35.54 ID:vM1YVHVQd.net]
>>842
そう言うの割とダルいから、データをクラスにまとめといて、開いた時点でシリアライズして文字列で持っちゃう。
保存時にシリアライズして文字列一致しなかったら、変更されてる

877 名前:ニ言うことにする。
一個ずつ比較したら改修で漏れるよ。
[]
[ここ壊れてます]

878 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 12:41:30.31 ID:huM3ZKfN0.net]
>>851
ありがとうございます
そうやって実行するんですね
visual studioよりむずいです

ただ、Program.csという自動生成されたファイルが実行されます
同じフォルダに自分で作ったsample.csがあるんですが、こっちを実行させる設定はどこからするんでしょうか?
パスを指定してからdotnet runしてもエラーになるます



879 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 12:42:32.67 ID:OjJXAwBNd.net]
>>853
いやだからチュートリアルくらいやれって

880 名前:デフォルトの名無しさん [2019/02/18(月) 12:59:06.77 ID:pxm+KTrW0.net]
>>852
それもいい考えですね。
メンバ変数に[DataMember]とアノテーションを
つければいいだけですね

881 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 13:05:27.38 ID:99WFuefSa.net]
まあ一度変更があった時点で実際には等価でも別物と見なす実装が一番簡単だねたぶん。
実際そういうソフト結構あるよね。

そういう手抜きが気に入らないなら素直にEquals実装するのが結局シンプルじゃないのかな。
フィールドが全部値型の構造体ならデフォルト実装で済むと思ったし

...と思って調べてみたけど、なんかドキュメントによって書いてるこが微妙に違うなw

https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/statements-expressions-operators/how-to-define-value-equality-for-a-type
↑には「リフレクションを使用して、型のフィールドとプロパティをすべて調べます。」と書いてあるが

https://docs.microsoft.com/en-us/dotnet/api/system.valuetype.equals?view=netframework-4.7.2
↑には単純にビットイメージの比較と書いてある

となってる。どっちが正しいんだ?w

882 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 18:49:02.00 ID:L0NbuPbAa.net]
>>856
> https://docs.microsoft.com/en-us/dotnet/api/system.valuetype.equals?view=netframework-4.7.2
のRemarksには、thisとobjの全フィールドが参照型でなければbyte単位の比較、そうでなければリフレクションを使うとある
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2231-overload-operator-equals-on-overriding-valuetype-equals
他に知っているもので↑では、リフレクションを使うとだけある

https://referencesource.microsoft.com/#mscorlib/system/valuetype.cs
少なくとも.NET Framework 4.7.2では、ビット比較だけしていそうなFastEqualsCheckを呼ぶパスが存在する
そのパスを通るか判定しているCanCompareBits関数はexternなので詳細不明

883 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 19:16:27.32 ID:L0NbuPbAa.net]
ごめん「他に知っているもの」に貼るURL間違えた
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1815-override-equals-and-operator-equals-on-value-types

884 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 11:05:06.64 ID:t+ZZI+Uh0.net]
vs codeのproblemの欄なんですが、間違ったコードを入力しても自動で更新されないようです
デバッグを実行しないとだめなようですが、リアルタイムにエラーを表示してくれる設定はできますか?
以前はできたんですが

885 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 12:03:57.65 ID:IsM0ebyqd.net]
日本語でよろしく

886 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 12:33:41.44 ID:efthhon4M.net]
そいつは難しいproblemだな

887 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 17:38:20.55 ID:JJR46+B00.net]
>>859
vs codeのことは専用スレで聞け、スレ違い
Visual Studio Code / VSCode Part5
https://mevius.5ch.net/test/read.cgi/tech/1541649564/

888 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 19:41:44.24 ID:t+ZZI+Uh0.net]
なぜmain関数の中に処理を書かないといけないのですか?
そういうルールだからってことですか?
pythonだとどこに書いてもいいと思うんですが



889 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 19:46:47.41 ID:+t+aP4snM.net]
そういう設計思想だから

890 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 19:54:09.61 ID:zirjw7Cj0.net]
main以外をエントリポイントにできるけどな
win32apiからの慣習

891 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 21:39:52.76 ID:eXSGnhOj0.net]
>>865
C#で出来るの?
どうやって?

892 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 22:33:06.53 ID:MriKnXlj0.net]
>>866
なくはない
https://ufcpp.net/study/csharp/cheatsheet/apscripting/

893 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 01:09:59.10 ID:WG18KXuW0.net]
助けて!!
Parallel.Forを使ってそれぞれで別の演算アプリを起動して
4スレッドで演算処理してるんだけど
アプリ強制終了してもスレッド(演算アプリ)はずっと処理し続けてるの!お願い止まって!!

親スレッド(UIスレッド)が死んだら子スレッドも死ぬみたいなお作法ありますか?
演算アプリはSystem.Diagnostics.Process使って起動してます

894 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 01:46:34.63 ID:3QCW37aG0.net]
Process.Kill()でしょ

895 名前:デフォルトの名無しさん [2019/02/20(水) 02:03:55.40 ID:/GvzZ744d.net]
>>868
それはC#的にスレッドとは言わない。
別プロセスだ

896 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 07:56:23.82 ID:Jfh2EJBjr.net]
電源off

897 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 09:16:30.41 ID:JdxivbIi0.net]
>>868
CancellationTokenSourceを使ってみれば?

898 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 16:01:28.63 ID:qtZmd9yJa.net]
form1にsplit container をverticalで貼り付けて左右に2分割してその中にボタンとかコンポーネントいろいろ置いてて、
あとから上にmenu stlipを追加したくなってツールボックスからmenu stripコンポーネントをドラッグ&ドロップすると
splitcontanerのpanel1かpanel2のどっちかにしか貼り付けられないのだけどform1にmenuStripを表示するようにするにはどう操作すればいいのでしょうか



899 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 16:10:46.41 ID:YXUL7WNb0.net]
一旦張り付けてから
ドキュメントアウトライン表示させてForm直下に移動させる

900 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 16:31:00.95 ID:ThCTwK+Ha.net]
>>873
前も書いたけど、
[ctrl] + [alt] + t

901 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 16:42:16.67 ID:qtZmd9yJa.net]
>>874
ありがとうございます

902 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 16:43:52.95 ID:qtZmd9yJa.net]
>>875
ありがとうございます

配置していたテキストボックスがめり込んでしまいましたがなんとか修正してみます

903 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 12:23:38.43 ID:A65FK9eD0.net]
目のかすみ
>>872
>>869
神!トークン付けてスレッド実行して
キャンセル時にスレッド内でIsCancellationRequestedで拾って
Process.Kill()すればいいのか
行けそうな気がしてきた

904 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 12:51:17.47 ID:Nj5ihKJg0.net]
それでいいのか
アプリ強制終了っていうからタスクマネージャから落とす時のことを想像してた

905 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 13:02:04.01 ID:A65FK9eD0.net]
>>879
それもあるよ!今はキャンセル機能ないから強制終了させて
この問題発せしたんよ
ちなみに強制終了の場合はなんか手法ある?
別プロセスもタスクマネージャーで落とすしかない?

906 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 13:15:26.35 ID:Nj5ihKJg0.net]
基本的にはそうじゃないかね
ちょっと凝った風にするならプロセス間通信でハートビート送って応答なけりゃ自死するとかあるけど

907 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 16:20:57.98 ID:+4fiWh+W0.net]
すみません、コルーチンの使い方について教えてください。
例えばRPGなどのゲームで、キャラクターAに話しかけると、数秒待って反応が返ってくるという処理をしたいと思っています。

まず、数秒待つというコルーチンを作り
private IEnumerator waitforsecond(float sec) {
yield return new WaitForSeconds(sec);
}

次にAに話しかけた時の処理を作りました。

public void Sample(){
 //50%の確率で無視される
 if(Probability.DetectFromPercent(50)){
MainText.text = “Aに話しかけてみた・・・”;
StartCoroutine(waitforsecond(2));
 MainText.text = "なんとAから無視された!”;
 
 //50%の確率で殴られる
  }else {
MainText.text = “Aに話しかけてみた・・・”;
StartCoroutine(waitforsecond(2));
MainText.text = "なんとAから蹴られた!”;

908 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 16:24:21.78 ID:+4fiWh+W0.net]
これで、話しかけたあと2秒時待機して反応がある、という処理になるかと思ったのですが、うまく行きません。

あと登場キャラクターもA、B、C‥‥とたくさんいるのであれば、話しかけると数秒待って反応するという関数を作ってあげたほうがスッキリするのでしょうが、やり方がイマイチわかりません。



909 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 16:42:20.49 ID:VKoyYoRjM.net]
>>883
非同期や

910 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 17:11:57.24 ID:+4fiWh+W0.net]
>>884
非同期・・ググりました。
「非同期」とは重い処理があった場合は終わるのを待たないこと。とありますが、、

911 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 19:03:38.92 ID:+XWUccMjM.net]
Wait前にthis.Refresh()って無意味だっけ

912 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 19:53:42.96 ID:5v/pkJgQa.net]
>>882
何で待つのにイテレーターを使うのかちょっと意味がわかんないねw

913 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 20:08:47.12 ID:c4smrZlO0.net]
yieldでコルーチンという一昔前の一発芸がUnityで幅を利かせているから仕方ないのねー

914 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 20:11:16.75 ID:969mh7640.net]
俺もあいまいな理解だから偉そうには言えないけど
>>882
ここのサンプルが分かりやすいかも
developer.wonderpla.net/entry/blog/engineer/Unity_Co-routine/
>>885
private IEnumerator waitforsecond(float sec) とpublic void Sample()が非同期(違う時間軸での動作)になるので待ち時間になっていない
>>887の言う通り待ち時間には他の物を使わないと

915 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 20:17:45.84 ID:mRRRBv2X0.net]
>>878
その演算アプリがどういう物かわからんが
そもそもそれ別プロセスじゃないとダメなのか?

916 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 22:25:20.57 ID:+4fiWh+W0.net]
>>889
ありがとうございます。
他の物とは具体的にどんな関数を使えばいいのでしょうか?

917 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 23:14:15.44 ID:5v/pkJgQa.net]
>>891
思ったより面倒臭い
https://ideone.com/Sf85HN

918 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 23:22:50.38 ID:5v/pkJgQa.net]
>>892
これ書いてて一つ疑問に思ったのが、
MessagingTask = MessagingTask.ContinueWith(t => job.Action());
これを以下のように、
MessagingTask.ContinueWith(t => job.Action());
こう変えると期待した動きにならない。
ContinueWithってキューになってて先に入ってるタスクの完了を待って次を実行すると思ったけど違うのか



919 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 23:42:43.30 ID:aABnGI350.net]
>>893
重箱の隅…だが。
Task.Run(() => { })の代わりにTask.CompletedTaskってあるよ。
後、Task.Delay(Pause).Wait()ってThread.Sleep(Pause)で良いんでない。

920 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 23:44:55.38 ID:e6A24yU10.net]
>>893
継続タスクが1つとは限らない。複数あったらパラって実行される。

921 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 23:48:25.54 ID:5v/pkJgQa.net]
>>894
うん、知ってたけど今使ってるのがVS2015なのよ...

922 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 23:49:35.07 ID:5v/pkJgQa.net]
>>895
やっぱり俺が誤解して理解してたんだなありがと

923 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 14:44:05.16 ID:3cOSTboLa.net]
MenuStripコンポーネントでItemを選択した時にその左にチェックを入れるようにしてるのだけど
選択した時点でメニュー閉じちゃって若干不便なのだけど
ひらいたままにする設定にはできないのでしょうか

924 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 19:07:18.92 ID:gzY/wSmba.net]
>>898
ルートのアイテムの直下ならClickか何かで親のShowDropDown()を呼べば一応実現できるっぽい。
入れ子になってる場合は、

....

ToolStripMenuItem1.Click += (sender, e) =>
{
  RecursiveShowDropDown(((ToolStripMenuItem)sender));
};

....

void RecursiveShowDropDown(ToolStripMenuItem item)
{
  if (item == null) return;
  var parent = item.OwnerItem as ToolStripMenuItem;
  RecursiveShowDropDown(parent);
  parent?.ShowDropDown();
}

たぶんこれでいける。
でもエンターキーでクリックした場合の操作性に問題が残るけど

925 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 19:24:23.57 ID:gzY/wSmba.net]
こっちの方がいいか
EventHandler eh = (sender, e) =>
{
  Action<ToolStripMenuItem> a = null;
  a = item =>
  {
    if (item == null) return;
    var parent = item.OwnerItem as ToolStripMenuItem;
    a(parent);
    parent?.ShowDropDown();
  };
  a((ToolStripMenuItem)sender);
};
ToolStripMenuItem1.Click += eh;

926 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 03:15:52.41 ID:pRL7US30a.net]
>>899
無事できました
ありがとうございます!

927 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 11:47:42.69 ID:L3+XvQB40.net]
質問です
現在、以下のように一つの非同期処理(時間のかかるディスクの書き込み)
を実行しています。

private async void button1_Click(object sender, EventArgs e)
{
 await DoSomethingAsync();
 MessageBox.Show("完了");
}

これを実行中にUIを操作して、次の処理の準備ができたら(実行する内容はDoSomethingAsync)
button1を押して予約し、実行中の処理が終わったら引き続き実行させたいです。(並列ではなく)
また、「完了」は登録されたタスクが全て終わったときに出したいです。
どのように書くのが一般的なのでしょうか?


初回実行時にすべての実行すべきタスクがわかっている場合は
そのタスクのリストを作ってWhenAllする みたいなのはググったら出てきたんですが

ContinueWithを使うのかなと思ったのですが、書き方がわかりませんでした

928 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 11:58:25.65 ID:u2ta9zSf0.net]
Queue<T>を使えば良いんじゃね



929 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 12:36:22.83 ID:cR8EPyISM.net]
>>902
最後に追加したTaskを覚えておいてContinueWithで繋ぐとかできなくはないけど、
そんな変なハックをするくらいなら素直に別スレッド立てて順番にバックグラウンド実行したほうがいい
Producer-Consumerでググれ

930 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 11:09:41.10 ID:a5srEHrc0.net]
c#のフォームで、タイルマップエディタのようなものを作りたいのですが、どのような情報を調べたらいいでしょうか
また、そのような目的に適したフォームはありますか?

そもそもC#が適切なのかわからないのですが






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<273KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef