ふらっと C#,C♯,C#(初心者用) Part141
レス数が950を超えています。1000を超えると書き込みができなくなります。
!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/
■コードを貼る場合は↓を使いましょう。
http://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
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured main以外をエントリポイントにできるけどな
win32apiからの慣習 助けて!!
Parallel.Forを使ってそれぞれで別の演算アプリを起動して
4スレッドで演算処理してるんだけど
アプリ強制終了してもスレッド(演算アプリ)はずっと処理し続けてるの!お願い止まって!!
親スレッド(UIスレッド)が死んだら子スレッドも死ぬみたいなお作法ありますか?
演算アプリはSystem.Diagnostics.Process使って起動してます >>868
それはC#的にスレッドとは言わない。
別プロセスだ >>868
CancellationTokenSourceを使ってみれば? form1にsplit container をverticalで貼り付けて左右に2分割してその中にボタンとかコンポーネントいろいろ置いてて、
あとから上にmenu stlipを追加したくなってツールボックスからmenu stripコンポーネントをドラッグ&ドロップすると
splitcontanerのpanel1かpanel2のどっちかにしか貼り付けられないのだけどform1にmenuStripを表示するようにするにはどう操作すればいいのでしょうか 一旦張り付けてから
ドキュメントアウトライン表示させてForm直下に移動させる >>873
前も書いたけど、
[ctrl] + [alt] + t >>875
ありがとうございます
配置していたテキストボックスがめり込んでしまいましたがなんとか修正してみます 目のかすみ
>>872
>>869
神!トークン付けてスレッド実行して
キャンセル時にスレッド内でIsCancellationRequestedで拾って
Process.Kill()すればいいのか
行けそうな気がしてきた それでいいのか
アプリ強制終了っていうからタスクマネージャから落とす時のことを想像してた >>879
それもあるよ!今はキャンセル機能ないから強制終了させて
この問題発せしたんよ
ちなみに強制終了の場合はなんか手法ある?
別プロセスもタスクマネージャーで落とすしかない? 基本的にはそうじゃないかね
ちょっと凝った風にするならプロセス間通信でハートビート送って応答なけりゃ自死するとかあるけど すみません、コルーチンの使い方について教えてください。
例えば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から蹴られた!”; これで、話しかけたあと2秒時待機して反応がある、という処理になるかと思ったのですが、うまく行きません。
あと登場キャラクターもA、B、C‥‥とたくさんいるのであれば、話しかけると数秒待って反応するという関数を作ってあげたほうがスッキリするのでしょうが、やり方がイマイチわかりません。 >>884
非同期・・ググりました。
「非同期」とは重い処理があった場合は終わるのを待たないこと。とありますが、、 Wait前にthis.Refresh()って無意味だっけ >>882
何で待つのにイテレーターを使うのかちょっと意味がわかんないねw yieldでコルーチンという一昔前の一発芸がUnityで幅を利かせているから仕方ないのねー 俺もあいまいな理解だから偉そうには言えないけど
>>882
ここのサンプルが分かりやすいかも
http://developer.wonderpla.net/entry/blog/engineer/Unity_Co-routine/
>>885
private IEnumerator waitforsecond(float sec) とpublic void Sample()が非同期(違う時間軸での動作)になるので待ち時間になっていない
>>887の言う通り待ち時間には他の物を使わないと >>878
その演算アプリがどういう物かわからんが
そもそもそれ別プロセスじゃないとダメなのか? >>889
ありがとうございます。
他の物とは具体的にどんな関数を使えばいいのでしょうか? >>892
これ書いてて一つ疑問に思ったのが、
MessagingTask = MessagingTask.ContinueWith(t => job.Action());
これを以下のように、
MessagingTask.ContinueWith(t => job.Action());
こう変えると期待した動きにならない。
ContinueWithってキューになってて先に入ってるタスクの完了を待って次を実行すると思ったけど違うのか >>893
重箱の隅…だが。
Task.Run(() => { })の代わりにTask.CompletedTaskってあるよ。
後、Task.Delay(Pause).Wait()ってThread.Sleep(Pause)で良いんでない。 >>893
継続タスクが1つとは限らない。複数あったらパラって実行される。 >>894
うん、知ってたけど今使ってるのがVS2015なのよ... >>895
やっぱり俺が誤解して理解してたんだなありがと MenuStripコンポーネントでItemを選択した時にその左にチェックを入れるようにしてるのだけど
選択した時点でメニュー閉じちゃって若干不便なのだけど
ひらいたままにする設定にはできないのでしょうか >>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();
}
たぶんこれでいける。
でもエンターキーでクリックした場合の操作性に問題が残るけど こっちの方がいいか
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; >>899
無事できました
ありがとうございます! 質問です
現在、以下のように一つの非同期処理(時間のかかるディスクの書き込み)
を実行しています。
private async void button1_Click(object sender, EventArgs e)
{
await DoSomethingAsync();
MessageBox.Show("完了");
}
これを実行中にUIを操作して、次の処理の準備ができたら(実行する内容はDoSomethingAsync)
button1を押して予約し、実行中の処理が終わったら引き続き実行させたいです。(並列ではなく)
また、「完了」は登録されたタスクが全て終わったときに出したいです。
どのように書くのが一般的なのでしょうか?
初回実行時にすべての実行すべきタスクがわかっている場合は
そのタスクのリストを作ってWhenAllする みたいなのはググったら出てきたんですが
ContinueWithを使うのかなと思ったのですが、書き方がわかりませんでした >>902
最後に追加したTaskを覚えておいてContinueWithで繋ぐとかできなくはないけど、
そんな変なハックをするくらいなら素直に別スレッド立てて順番にバックグラウンド実行したほうがいい
Producer-Consumerでググれ c#のフォームで、タイルマップエディタのようなものを作りたいのですが、どのような情報を調べたらいいでしょうか
また、そのような目的に適したフォームはありますか?
そもそもC#が適切なのかわからないのですが VisualStudioでデバッグ実行した時だけプログラムがフリーズしてしまうのですがこういう時はどういった原因が考えられるでしょうか?
WinFormを使用していてフォームが立ち上がったらバックグラウンドで色々するって感じの処理なのでどこかでUIスレッドをブロックしているのかとも思いましたがConfigureAwait(false)の設定し忘れは無さそうでした
VisualStudioを通さずに直接実行した場合は正常に動作しています とりあえずフリーズした時に「すべて中断」して
どこでブレイクされるか確認
ついでにスレッド一覧を見てみる >>908
それを試そうとしたのですが全て中断しても中断出来ない状況です
中断押すとVS自体もフリーズしてタスクマネージャーからプログラムを終了しないと復帰出来なくなります 最前面じゃなくて後ろ面にアクティブウィンドウがポップアップされてるんじゃね >>902
単純にボタンをクリックした回数だけ非同期メソッドを実行したいだけなら
これでいいような気が
private bool mBusy = false;
private int mRepeatCount = 0;
private async void button1_Click(object sender, EventArgs e)
{
mRepeatCount += 1;
if (mBusy) return;
mBusy = true;
for (int i = 0; i < mRepeatCount; i++)
await DoSomethingAsync();
mBusy = false; mRepeatCount = 0;
MessageBox.Show("全部終わった");
} >>907
俺はエディタでヒント表示させただけで落ちるけど。Blendなら使えてる。 https://i.imgur.com/NCB8nLP.jpg
c#をデバッグするとこのようなエラーが出るのですが、どこを改善すればいいかヒントをください ↑ありがとうございます
.NET Core Launch (console)
というデバッガを使っているので、
"program": "${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
という部分を修正するのだと思いますが、どう修正するんでしょうか?
実行したいプログラムを{workspaceFolder}/Program.csと指定してもエラーになります >>915
いやだからcsじゃなくてdllだってば >>915
プログラミングするなら英語は必須だから、「何だか分からないこと言ってる!」とか思わずにちゃんと読みな。 >>916
c#なのにDLLなんですか?
このDLLのパスは何をしてるんですか? 普通にVisualStudio(Codeじゃないやつ)ダウンロードして知識付けてから挑戦しろよ
邪魔だよ >>909
そうなるともう新しいプロジェクトに今のを段階的に移していってどこで再現するか確認するかなぁ >>919
とりあえずエクスプローラなりコンソールなりvscodeとは別に開いて
プロジェクトフォルダのbinフォルダの配下を確認
どこかにビルド結果のdllが作られてるから
うちはいつの間にかPlatformって環境変数が定義されてたせいで
HPDとかいうフォルダが1個挟まってたぞ >>922
ありがとうございます
とりあえず特定のメソッドを呼ばなければ大丈夫ということがわかったのでデバッグモードでは呼ばないようにして対策することにしました >>923
デバッグできました 余計なフォルダが挟まっていました
指定してやらないといけないんですね ありがとうございました setterメソッドで文字列が8文字以下ならname変数に引数を代入する文を書きたいんですけど
どのように書けばいいんでしょうか? private string name;
public void SetName( string name )
{
if ( name.Length <= 8 )
{
this.name = name;
}
} セッターよりもプロパティで良い気がする
private string name;
public string Name
{
set
{
if ( value.Length <= 8 )
{
this.name = value;
}
}
get
{
return this.name;
}
} >>931
ありがとうございますー
lengthを使うとint型とstringをオペランドに比較が使えるんですね
覚えておきます >>933
> lengthを使うとint型とstringをオペランドに比較が使えるんですね
言いたいことはなんとなくわかるけどほんとに理解してるのか不安になる文章だな 8文字越えた場合や
検証属性の話をと思ったけど自重 Windows.Forms の質問です。
TextBox 数個と MenuStrip に サブメニューのない MenuItem を追加したFormで
Altキーでメニューを選択すると、
カーソルキーの上下でTextBoxのフォーカスが移動するのですが
どういった理由でしょうか? うーん
ショートカットキーの設定ができるので
ツールバーの代わりに使おうと思ったんですが
予想外のキモい動きで躊躇してます JS
hoge([[1,2,3], [4,5,6]]);
C#
hoge(new int[,] {{ 1,2,3 }, { 4,5,6 }});
javascriptみたいにnew付けないで渡せないですか?
paramでは2次元がだめでした。 サイドバーについてなんですが、例えばgimpというソフトがあるのですが、両サイドにツールやレイヤーが表示されています
このように領域を分けるコントロールを教えてください
win form c#です
これはもう1つフォームを追加してるんでしょうか? >>942
フォームの枠の中に配置・移動させるのならVisual Studioでデザイナ画面+ツールボックスの「コンテナー」のカテゴリの好きなものを
フォームの枠の外やはみ出して使いたいものには別のフォームを割り当て、というのが基本じゃないかな
GimpはCだからどうやっているかは知らないけど 別フォーム使った場合でもドッギングなど可能ですか?
だとすれば分けたほうが作業しやすそうですが >>940
超初心者か池沼向け
普通の人はwebで充分 >>945
win formではドッギングや分離はできないのですか?
また、別フォームと同じフォームでやるのとではどちらが都合がよいでしょうか >>948
ttps://dobon.net/vb/dotnet/links/dockingwindow.html 市販のinfragisticsのドッキングウインドウが楽チンだったわ Form1からForm2を呼び出すとき、こういう記述をしますが、変数の型がどうしてForm2なんでしょか?varじゃエラーです
Form2 form2 = new Form2();
form2.Show(); 学習のために、確保した変数がスタックかヒープかどっちにあるのか知りたいんだけどさあ
簡単にチェックする手段ってないんかな? メモリダンプ系のツール使えばいいよ
昔の話だがメモリ上のオブジェクトグラフを可視化してGC絡みのバグをデバッグした事がある "変数が"ってことなら変数の型が参照型か値型か
要はコンパイルの時点で判断できる
IntelliSenseでclassかstructを見れば良い話に思えるが >>953
Form2というプロジェクトを作りましたが、これがクラスになるんですか?
この変数型はどういう意味ですが >>961
一回チュートリアルなり
入門書とか入門サイトなりやってみろと レス数が950を超えています。1000を超えると書き込みができなくなります。