ふらっと C#,C♯,C#(初心者用) Part141
レス数が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 まあこっちかな
時節柄か変な生き物が多いからな
一週間見なくて済むのは嬉しい WinFormsとWPFがオープンソース化されたから、OSS禁止の開発には使えなくなるな 前スレにも何人かいたが、ここは業界談義や雑談をするスレじゃないから
そういったことはマ板でやってくれ WinFormにGeckoブラウザをfill表示させてhtmlとcss、jsでUI作るのが一番楽
実質electronみたいなもんだろ
ロジックはc#だし Consoleアプリで、Main関数から別スレッドを起動して
func1()を一回だけ実行したいんですが、
system.timers.timerとかsystem.threading.threadとかいろいろあるんですが、
初心者向きのお手軽なのはどれでしょうか? >>9
生のThreadを扱う場面はほとんど無いから、Task覚えた方が良い
static void Main( string[] args )
{
var task = Task.Run( () =>
{
func1();
} );
task.Wait();
} 既にRyuJitやRoslyn、MSBuildはOSSだから、C#使ってる時点で完全にOSS使わないってのは難しい気がするけど なにで開発すんのって、普通にMSBuildとか使ってますよ
OSS禁止を真面目に言ってる人は本質的に疎い人なんで、その辺は理解できていません
MSBuildが何なのかすら、いや、存在すら知らないでしょうな >>13
これ、MSDNのサンプルコードもなぜか必要のないラムダ式をわざわざ作ってるね >>17
直接func1を渡す形だとコピペアビリティが低いからだろ >>16
OSS使ってることに気づいてないだけよね msbuildもcscもビルドに使われるだけで成果物がそれに依存しているわけではないだろう
OSS禁止でもeclipseはOKなのと同じ理屈
WinFormsやWPFという正真正銘のOSSを使うのとはわけが違うよ OSSが禁止されがちなのはそのライセンス形態にあると思うんだが
WinFormやWPFがいきなりGPLになるわけじゃないし Oおっ
Sさんが
Single(一人で作ってる)
アプリ 数字と英語の組み合わせをバラして配列に格納する時の条件分岐のパターンが分かりません。
組み合わせパターン
@654321
A654321-3
B654321C
C654321あ-12
最初は必ず数字6桁
英語or平仮名orカタカタ一文字があるかないか
ハイフン挟んだあとは数字のみ。
これを配列に[0]〜[2]に入れたい。
Aの場合
[0] 654321
[1] ""
[2] 3 >>26
キャプチャに使う正規表現はこう
(?<first>[0-9]{6})(?<second>[ぁ-んァ-ンA-Z])?(-(?<third>[0-9]+))?
使い方が分からないなら「C# 正規表現 キャプチャ」でググれ 5分おきに実行するタイマー作ってるんですが、System.Windows.Forms.Timerって、timer.Enabled = trueにした瞬間に1回目が実行されますよね?
trueにした瞬間は実行してほしくなくて、trueにしてから5分後に1回目を実行してほしいんですが・・・
System.Timers.Timerだと希望通りに動くのですが、理解として間違ってませんよね? WinFormsやWPFのライセンスってMITだろ
フル機能の業務向けGUIフレームワークがそんなガバガバなライセンスでOSSとして公開されるなんて前代未聞じゃね
それだけMSにとってPCクライアントアプリのビジネス的価値が低下したということでもあるし、
どうせWinFormsもWPFもWindowsにネッチョネチヨにベッタリと依存していて
他のOSへのポーティングなんかできねえだろうという、ある意味自信の表れでもあるんだろうなw ポーティングされても惜しくないと言うか、ポーティングしてほしいんだと思うけど。
でなきゃ.net coreでマルチプラットフォームなんかやらんのでは? ポーティングは無理やで
.NET Core 3.0 は WPF を動かすために mixed module assembly (つまりC++/CLI)をサポートしたけど、これがWindows限定 シャープやフラットで分からないことがあります
どこで聞いていいかわからないので、シャープやフラットがスレ名に含まれているこのスレで聞くことにしました
適切でなければ誘導ください、お願いします
さて本題ですが
https://www.youtube.com/watch?v=Pv-zYCNh8TY
をみていて、上と下の音がずれていますが、これでハモっているのはどうしてなのでしょうか? OSSにしたとはいえメンテンナンスを放任するってわけじゃないみたいだからね
精々フォークはご自由にってところなんでしょ
monoのように、というよりmonoのWinformsを.NET Coreに合わせる方がまだ可能性はあるのでは >>39
そういう意味ではなく、例えば最初の音は、上はラで書いてあるのに下はシです、いくら私が素人でもラとシでは響きようがないと思ってしまいますが、動画の音は三度/六度の和音になっているのはどうしてですか? >>38
普通のトランペットはB♭管って言って「ド」の音を出すとピアノのシ フラットの音が出る
なのでその楽譜の最初の音はピアノの「ソ」の音
下段のユーフォニウムもB♭管なんだけど歴史的にC管として楽譜が書かれる
なので最初の音は楽譜通り「シ」の音が出るのでハモってる
ちなみにこの時ユーフォニウムの奏者は「ド シャープ」として演奏してる
って流石にスレチだろ
詳しくはこの辺りで聞いてくれ
ユーフォニアム総合スレ
https://lavender.5ch.net/test/read.cgi/suisou/1538816683/ >>43
ありがとうございます。とてもよくわかりました、移調譜というやつですね、ドの指使いで♭シがでる、だからラの指使いで実音ではソが鳴るんですね
さすがプログラム板、こんな質問でも答えていただけるとは、とてもありがたく感謝しています たまには外の空気を吸うのもいいものだ
(解決したみたいだが、サッパリわからんw) >>37
msがやる必要は無いっしょ…
monoだってまだ生きてるんだぞ。 .NET Coreの特許は互換性のある実装に対してのみ利用が認められるから、
MSがCoreは非Win OSでWinFormsやWPFを動かせるようにはしないと明言してる以上、
法的にはフォークしてポーティングするのはいかにMITライセンスだろうと特許侵害でMSに訴えられるリスクがあるよ
流石にOracleとは違ってそんなことしたら大炎上して窮地に追い込まれることはMS自身がよく理解してるはずだから、現実にはまずありえないけど なるほどねー。
mono側は逆に実装が見れちゃうからクリーンルーム実装ではないと言いづらくなるか。 >>49
monoはもうとっくにMSに吸収されてるんだけど 結局、あのザマリン悪ふざけ問題がルート潰しているんだよな UIは今後すべてhtmlとcssに統一してほしい
エレクトロンもそうだし >>54
でもブラウザのバージョンアップですぐ動かなくなんで C#のコンソールアプリから、
毎日指定した時刻に何らかのプログラムを実行したいのです。
例えば毎日朝10時に実行するなど。
あるいは、1時、2時、3時、、、に実行するなど。
実行時間の誤差は±10分くらいあっても構いません。
どんな手法がお勧めですか? C#で完結させようなどという愚かな考えは捨ててタスクスケジューラを使う
ローカルで動かす必要がない物ならAWS LambdaにデプロイしてCloudWatchのスケジュールで動かすなんてのも手軽で良い >>60
無限ループ(=常駐)PGを作って
適当な間隔でシステム時刻と比較して
実行したい時刻を過ぎていたら
Processkクラスを使ってでキックとかが一般的だと思うが
https://dobon.net/vb/dotnet/process/shell.html
その常駐PGが落ちた時に実行できないから
結局>>61の話になるな そもそもログインしてなかったらどうなる?でサービス化するもんだと思っていた >>63
ログインしてない時まで実行したいとなるとサービスにして自前でやるかタスクスケジューラに起動してもらうかの2択だわな まぁc#によるサービス作成はNTや2000時代から見れば、
すんげー楽になってるので、余裕が出来れば挑戦お勧め スケジュール変えたくなったらソース弄るの?自前で独自cronみたいな設定を実装するの?その使い方サービスごとに覚えなきゃいけないの?
運用が面倒だから安易なサービス化はやめなさい サービスはサービスにしかできないものに限定して、やったとしてもタスクスケジューラに登録するソフトのみかなぁ。 タスクスケジューラに一票。
もしサービス化するとしても、サービスは蹴られるの待つようにして、タスクスケジューラに蹴らせたほうが良い。
どうせ「今すぐもう一度走らせたい」がそのうち出る案件な気がする。 Microsoft自身もWindows Defenderとかタスクスケジューラ依存だから、たぶんこれが一番簡単で安定した方法なんだろうな >>66-69
まずはケースバイケースという言葉を覚えような
自分の狭い範囲で語られても困る >>71
ここは初心者スレ
どうせ何が善い方法かなんて本人に判断つかないんだから、余計な選択肢は質問者を混乱させるだけ
ベストプラクティスさえ示してやればよい 初心者スレだが初心者以外の人の方が見てるようなスレ >>71
ケースバイケースを考えられる奴は質問なんかしないだろう。
まずはタスクスケジューラ、
サービス化するとしてもタスクスケジューラから蹴った方がいい、
そんなに変な事言ってるか?2択と対して変わらん事言ってるつもりだが。 あーはいはい、永遠の初心者はC#なんか使わずに一生javaでもやってろ >>72, >>74
自称玄人の狭い世界を押し付ける方が混乱するわ
タスクスケジューラからサービス蹴るとかを初心者に薦めるとかバカすぎる 大抵の人は最初なんでもモノリシックに作ろうとして、スケジューリングと処理は分けたほうがよいことに自分なりに気付くもんだよね
分けるのダサいと思ってた時期は俺にもあったわ >>77
俺は押し付けなんてしてないけど?
またバカ晒しちゃったね w >>76
玄人だって言った?
ってかタスクスケジューラからサービス蹴るってそんなにハードル高くないでしょ。
メッセージ送るなり、サービスでFileSystemWatcherでフォルダ監視して、投入はキューファイル作ってでも良いし。
後者は初心者でもすぐ思いつくし実装できる話だと思うけど。
もしかして自分が出来ないから初心者に勧めるなとか言ってる? 何を争ってるのかさっぱり分からんけど、双方とも少しも
建設的な意志がないことだけは確実に分かるねw OSに近い所まで楽チンに触れるのがC#の利点の一つ
だと思うけどな。
タイマー使って指定ディレクトリの監視とかはすぐ思い付くでしょ >>80
> 玄人だって言った?
ひょっとして揶揄って言葉を知らんのか? w
> ってかタスクスケジューラからサービス蹴るってそんなにハードル高くないでしょ。
ハードル以前に送出側も作れとかアホすぎる… >>83
玄人だって言った?って揶揄なんだけど。
馬鹿すぎてブーメランまた投げてるよ?
送出側って簡単だよね。FileSystemWatcherならファイル置くだけだし。バッチファイルでも良いじゃん。
自分が思いつかなかっただけならそろそろ黙ったら? せめて揶揄の意味ぐらい調べてこいよ…
マジで恥ずかしすぎる >>85
で、送出側作るのは難しいの?
恥ずかしいね。 >>87
日本語理解できないの?
ハードル以前の話って書いてあるんだけど?
なぜそんな面倒なことを初心者にさせようとするのか意味不明なんだが >>86
いつものキチガイだからNGしとこう
ほら早速ワッチョイが役に立ったぞ >>88
無意味だと思ってるのはお前ができないからかつやる必要があるパターンが頭に浮かんでないかだろw
意味不明なのはお前が低レベルだからだよ。 >>90
初心者にとってそれがベストプラクティスだと言い張るなら根拠書けばいいんじゃね?
書けるならね w 便乗で質問です。
ログインしてない状態で指定時間になったら指定のユーザーでログインしてブラウザでスクレイピングしたいです。
サービスやタスクから適当なユーザーでログインするにはどうしたらいいでしょうか? もっと具体的でないと回答しようがないかな
ログイン認証はWebサーバー側の話ならローカルアカウント
関係ないし
ローカルアカウントの話ならグループポリシーでサービス起動
出来るようにするのが一般的だったけど
OSのバージョンやADが有効なら出来ない場合もあるよ >>92
タスクスケジューラで、誰として実行するか決めれる。
タスクスケジューラ否定してる奴らは、タスクスケジューラ使って言ってるんだろうか? 誰も否定してないと思うが?
どれをそう感じたんだろう? 3日間もこの話を続けてるのか
よく飽きないねーガイジか? こういう質問者って解決の道筋を知りたいんじゃないんだよ
WindowsのこともC#も学習する気はまったくなくて、代わりにコードを提示して欲しい人なんだ
なので、「タイムスケジューラ+コードは自分でかけ」とか「自分で書いたコードをサービス化しろ」と回答しても無駄なんだな
誰かが代わりに希望のツールを作ってあげるまで延々と同じ質問をすることになっちゃう いつも同じなのは、問題起こすのが特定の一人なんだろうね 昔はそういうの参戦してたけど
俺が最強だとわかってからは興味がなくなった 一つのメソッドに処理A、処理B、処理Cがあるんだけど、処理〇と区別できる時点でメソッドとして扱うべきなんかね? やってることに意味があり、それに名前が付くなら分ける
個人的には〇〇処理と名前が付くのはメソッドの単位としてはむしろ大きめ
単独で意味のある最小単位まで分けるのが理想 何を言ってるのかさっぱりわかりませんから設計書を書いてください >>106
馬鹿の一つ覚えの教条主義はよくない
分けた方がそのメソッドの可読性が上がるなら分ける。
可読性に寄与しないなら無理に分けちゃダメ。
なぜならクラス全体の視点ではメンバーは少ない方がいい。 メソッドの可読性ってセンスが求められるからなあ
端的に言えば、そのメソッド呼び出しを見たときに、その中身をいちいち見に行かなくてもコードを理解できるかどうか、が全てだ
それができるならどこまで細かく分けてもいいし、できないなら分けないほうがマシ
処理の流れがわからんからサブプロシージャやめろおじさんの言い分も、低レベルな現場なら極めて正しい そうだよな。calcって名前のメソッドがあれば計算していることはわかる。 とは言え、ループが把握できる大きさに抑えるのは大事
メソッドの処理の流れが見える範囲に大きさコントロールするように心がけているな >>111
場合によるだろ
「多角形の面積」クラスのcalcメソッドを呼び出してたら面積を計算してるのは明らかであり、面積の計算方法に関心がない限りは中を見る必要はない
それが「多角形」クラスのcalcメソッドだったら意味不明だろう
極端な例だけど、そういうのってセンス無い奴は本当にセンスないから まあそういうところに日本語のコメント書いとけばすむ話だな。
命名センスないからな。自分。。 メソッド名はわかり易さより英語として恥をかかない程度の単語かどうかってのを気にするな
後で見られたときに笑われたくはない
簡単な単語でもスペルはチェックする 長さが10,15と異なるList<string>が2つあって10のListの値を15のListに先頭から埋めていきたいんだけど、ListでArray.Copyメソッドみたいなのないのかな? >>120
a10 = a15.GetRange(0, a10.Count);
ボトルネックでないならこんなんで十分 120がやりたいのは要素の置換じゃないの?
まあ、組み込みの方法は用意さえてないので自分で書くしかないよね インプレースで置換する必要があるなら a10.Clear(); a10.AddRange(a15.Take(a10.Count)); でいいよ
少々非効率だがどうせこんなもんボトルネックにはならん 15の方にコピーしたいって言ってるのに逆ばっかじゃねーか
偉そうに答える前に日本語の読み方を覚えろよ よく見ると逆ですらない
121はa15の先頭から10要素のリストだし
123はa10.Clear()後にa10.Countを参照してるので、実行後のa10は空だ a15=a10.AddRange(a15);
で良くね? a15は.Skip(a10.Count)が必要だしAddRangeは返値voidだし
a10が破壊されるのは気持ち悪すぎる せめて.Concatでやって a10.Select((v, i) => i).ToList().ForEach(p => a15[p] = a10[p]) 質問です
applicationSettingsBaseを使って設定を保存したソフトのフォルダを移動したところ
設定がすべて消えてしまいましたが仕様でしょうか。
これを回避するためにはソフトと同じフォルダにiniを作るなどして設定を保存しないといけないでしょうか。 SettingsProviderを自作すれば保存場所は変えられなかったか >>135
ApplicationSettingsBaseなんて使ったことないのでいい加減に言うけど、
普通に考えれば保存場所は起動したバイナリのパスになんか依存しないはずだと思うけど
http://www.atmarkit.co.jp/fdotnet/dotnettips/438winsettings/winsettings.html
ここにも書いてあるけど、バージョンとか製品名とかアセンブリの属性を何か変更したから
保存場所も変わったんじゃないの? ごめん>>137は訂正
俺の記憶違いで、記事にはバイナリのパスにも影響されると書いてあるねw >>137
いいえexeの絶対パスが変わると保存先も変わります
知らないなら適当に答えるなよ 設定の保存ならjson.net使ったほうが幸せになれるね 課題で10進数を2進数の文字列に変換したいのですが、これだとびっくりすくらい遅いです。
速くするにはどうしたらいいでしょうか。
class Program
{
public static void Main(string[] args)
{
string input = Console.ReadLine();
int i = Convert.ToInt32(input);
string output = "";
while(i >= 1)
{
output = output.Insert(0,(i % 2).ToString());
i >>= 1;
}
Console.WriteLine(output);
Console.ReadLine();
}
} >>148
stringはほとんどの場合毎回新しいインスタンスが作られるから、代わりにStringBuilder使ってみ 遅いっつっても一瞬じゃない?
たかが32bit整数くらいで。
試してないけど >>150
Convertのそんなのあったな感w
でもこれゼロサプレスされるみたいだな。
まあリーディングゼロ付けるのは簡単だけども Windowsフォームアプリケーションで、
「ボタン上をドラッグしてる間(左クリック押下中、かつボタン上にカーソルがある時)」に音を鳴らしたいんだけど
Button1.MouseDownで再生、Mouseupで停止させるまでは出来ても
MouseLeaveに停止処理書いて、クリックしたままボタンからカーソル外したときには音がなり続けてしまいます
どういう記述がいいんでしょうか? >>156
クリックしたままだとMouseLeaveが動かないみたいだな
https://ideone.com/c67R3i
これは音を鳴らす代わりにフォームのタイトルにMouse On/Offと表示する
MouseDownとMouseMoveでカーソルの場所を見てボタンの範囲外だと無条件でOffにする
イベントとしてのMouseLeaveは外せそうな気がするしフラグ作ってもっと作りこめると思うけど面倒だからここまで ありがとうございます!
入門したて故コード読んでも理解できないけど、丸写しからの改変で勉強しながらやってみます >>156
やらずに適当に言うけど、MouseDownのイベントハンドラか何かで
Captureの値をfalseにしてやったら望んでるような動作になるんと違う? dotnet new webapp コマンドでプロジェクト生成した時に Controllers も Models も Views も作られないので、ちょっと面食らっています。
ASP.NET Core で Razor Page を使ったアプリを作る際は、ASP.NET でいう Controllers と Models に該当するフォルダはどこに作ったらいいんでしょうか?
特にビジネスロジック部分はどこにまとめるのがいいのでしょうか? splitcontainerのpanel1に30個程度のボタンを設置し、それらは一つのイベントハンドラにまとめてて
押したボタンの色を変えるということをしようとしています
splitContainer1.Panel1.Controls[●].backColor = Color.Red ;
●の位置に入る数字はどのボタンと対応しているかがイマイチわかりません。
タブインデックスの数値とは別のようですし、どの数値の事を言っているのでしょうか。 >>161
期待通りの回答じゃないかもしれないけど、これでもいいんでは?
protected void button_Click(object sender, EventArgs e)
{
((Button)sender).BackColor = Coler.Red;
} >>160
dotnet new mvc
ASP.NET Coreは3.0以降でfull .NET Frameworkを切り捨てるから、必ず.NET Coreを使うように >>148
遅い原因は
>string input = Console.ReadLine();
じゃね?
ユーザーが全文字入力するのをぼんやり待ってないで
1文字でも入力された時点でその桁に関する処理を開始しとかないと >>165
>>149で解決すると思ったけど、その最後の行の実装例出せる? >>166
件のプログラムで一番処理時間が長いのは起動だと思うから
実際にはその程度やっても変わらんでしょ 何でもかんでもまずネタだと考えるのやめた方がいいですぞ ASP.NET Coreを使う練習してるんだけどさあ
実機で動かしてみるに当たって、手元のVisualStudioやVSCodeからLAN上にあるサーバ(Ubuntu)に配置して実行するまでって結構面倒に感じてしまう・・・・
これってなにかVisualStudioに配置実行を楽にする手段があるのかな?
それとも楽をしたければJenkinsかなにか勉強しなきゃあかんのかな・・・・ 今のところ、「手元でビルド→SCPコマンドで転送→SSHで実行」みたいにしてるんだけど・・・・やっぱもっといい方法あるよな LINQの質問です
list1とlist2はList<int>型だとして
foreach(var value1 in list1) {
foreach(var value2 in list2) {
Console.WriteLine(value1 * value2);
}
}
これと同じことをLINQを使ってやるとしたらどう書けばいいですか?
Zipを使ってみたのですが同じインデックス同士しか掛け合わせてくれませんでした >>173
メソッド構文ならSelectManyを使う
foreach (var v in list1.SelectMany(v1 => list2, (v1, v2) => v1 * v2))
{
Console.WriteLine(v);
}
この場合はクエリ構文の方が分かりやすいかも
var q = from v1 in list1
from v2 in list2
select v1 * v2;
foreach (var v in q)
{
Console.WriteLine(v);
} >>173
ttps://dobon.net/vb/dotnet/programing/arraymap.html
これでいけんじゃね?
ConvertAll >>170
AWSとか使えば簡単だよ
MSの推奨はもちろんAzureだけど、単なるVMのホスティングサービスとして使う以上のことを期待すると正直ゴミカスなので全くお薦めできない >>176
今時ConvertAllとか紹介してるゴミサイトはさっさと閉鎖すべき >>175>>176
いけました!
ありがとうございます
今回はSelectManyを使おうと思います >>166
考え方としては、例えば「3」が入力された時点で
次の入力結果は「3」か「30」〜「39」しかありえないから
11通りの2進数表示を用意しておいて次のキーが押されたらそこで合うものを選んで表示する
どんなに10進数の入力桁数が増えても毎回11通り用意すればいいのは一緒なのと
10進数が1桁増えるときに2進数表示で最後の4桁以外の文字列は使い回せるから文字列連結処理は多少減らせる
この処理がユーザーのキー入力速度より早くCPUが処理できれば多少意味がある程度だろうけど >>181
そのためにReadKeyを繰り返してたらそのオーバーヘッドの方が効果を圧倒的に上回ります
出直してきてください >>181について更にツッコむと、1文字ずつ処理するなら単に入力されたキーの値を普通に反映させていけばよい
わざわざ候補を事前に用意してGCに負担をかける意味は全く無い チラシを見てキャベツが1円安いからと電車賃300円払って遠くのスーパーまで買いに行くような無駄な努力に思える。 Json.NETを使ったデシリアライズについて教えてください。
以下のようなJsonファイルを読み込んで、リストにデシリアライズをしたいです。
[
{
"email": "foo.example.com",
"active": true,
},
{
"email": "bar.example.com",
"active": false,
}
]
しかし、デシリアライズ時に、オブジェクトが2つ以上会い場合に例外が発生します。
using ( var sr = new StreamReader( @".\accounts.json" ) )
{
var accounts = JsonConvert.DeserializeObject<List<Account>>( sr.ReadToEnd() );
}
例外
Newtonsoft.Json.JsonSerializationException
エラーの原因はわかるのですが、解決策が思いつきません。
よろしくお願いします。 デシリアライズではまる前に
オブジェクトをシリアライズして、どういうjsonが出来るか確認することを勧める >>187
オブジェクトが単体の時は[]で囲まれていなかったので、
配列として認識されないような気がします。
もう一度考え直してみます。
ありがとうございました。 >>186
うちの環境ではそのままで読み込めた。w
ああ、json ファイルのパスや、クラスをフルパスで書くように直したりはしたけど。
あと List<Account> を Account[] に変えてみても動作した。
json パーサは Newtonsoft.Json でいいんだよね?
ひょっとして json ファイルの文字コードや改行コードの問題だったりして。VS2017 で試した。 まあ結論としては只の配列よねw
List<>が勝手に出てくる訳もなく >>181
「10進数が1桁増えるときに2進数表示で最後の4桁以外の文字列は使い回せるから文字列連結処理は多少減らせる」
の意味がわからない。 >>191
アホ?
デシリアライズ先の型としてList<>を指定してるんだからどう見ても勝手に出てきてはいないでしょ
普通にデシリアライズできるよ >>192
単純に勘違いだろ。16進数から2進数への変換なら成立するけど
例えば251と256の2進数の下4桁が違うのはすぐわかる
質問引っ張るのもまずいけど元の質問者もフィードバックくらいしてほしいな json.netはList指定いけたわ
低速過ぎて最近使ってなかった
失礼した 9時と13時に定期的に作業を実行させたいので、タイマーを使ってプログラムを書きました。
似た部分が多いのでタイマー自体を配列化したのですが、「動作を停止しました」とエラーが出て動きませんでした。
タイマーの配列化って無理なんでしょうか?
System.Windows.Forms.Timer[] timerOnce = new System.Windows.Forms.Timer[2];
public GetControlsList()
{
myTimerOnce(timerOnce[0], "9:00");
timerOnce[0].Tick += new EventHandler(timerOnce_Tick);
}
// 指定時刻までの時間を計算して、Intarvalにセット
private void myTimerOnce(System.Windows.Forms.Timer thisTimer, string setTime)
{
//現在の時刻から、ターゲット時刻までのインターバルを算出
TimeSpan mySpan = DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd ") + setTime) - DateTime.Now;
int sleepSec = (int)mySpan.TotalMilliseconds;
thisTimer.Enabled = true;// タイマ ON
thisTimer.Interval = sleepSec; // 更新間隔
}
// 指定時刻になったらmethodを実行
void timerOnce_Tick(object sender, EventArgs e)
{
//実行したいメソッド
} アドバイス頂いた通りシリアライズを見直したところ解決しました。
var account = new Account { Email = "hogehoge.example.com", Active = true, };
using ( StreamWriter sw = File.CreateText( @".\accounts.json" ) )
{
var jw = new JsonTextWriter( sw ) { Formatting = Formatting.Indented };
new JsonSerializer().Serialize( jw, account );
}
このように書いていたので、accountをリストに変換してから行うようにしました。
new JsonSerializer().Serialize( jw, new List<Account> { account } );
レスくれた皆さん、ありがとうございます。
こちらもVS2017なのできっと文法違いが原因です。
Json形式を勉強し直します。 >>197
そもそもWinFormsのタイマーは精度や信頼性がとても低く、時間の計測に使ってはいけない
あくまで「時々処理をさせたい」だけのときに使うもの
あなたのケースならタスクスケジューラを使うのが定石です >>197
配列をnewしただけで中身のTimerをnewしてないからじゃないの まずデバッグ実行することを覚えた方がいい気がしないでもない >>200
まさにそれでした。
1行加えただけで解決しました。ありがとうございました。 本当に初心者質問ですが、ライブラリはimportとnamespaceから書いていくのと、どちらが良いのでしょうか
もしくは使い分けがあるのでしょうか >>204
C#はusingですけどスコープ内でオブジェクト破棄する機能もusingと呼称してるので混乱しないようにimportと表現しました
なんで2つの記述方法を許しているのか、何か意味があるのか気になりまして >>205
c#にもimportはあるから余計混乱するだけ
名前空間とusingsは全然用途違うでしょ? >>203
名前空間の全表記は可読性下げるので使ってないな
VSでカーソル当てれば名前空間表示されるし、今時テキストエディタでゴリゴリ書いている人でもなければ全表記する必要ないと思う >>208
MediaのcolorとDrawingのcolorが混在してるときはぶっ潰したくなる pathってファイルパスじゃなくて
曲線かよ死ねよとか
省略形でも違いがあったほうが絶対いい P/InvokeやCOM相互運用を書くときに
System.Runtime.InteropServices.ComTypes以下の構造体やインターフェースを使う時があるんだけど
System.Runtime.InteropServices以下に同名の物があるから、大体の場合で完全修飾かusing alias directiveが必要になって面倒なんだよなあ
.Net1.1時代の後方互換性のためにObsolete付きで残してあるんだろうけど邪魔で仕方がない >>211
その名前を知る事が大変ですよね
沢山本読むしかないんでしょうけど >>214
この話はusingの話で質問した人もわかっているし
わからないなら分からないなりに説明したらいいだけ
オレオレ用語使ってこんなところで質問するのは普通におかしい スレ間違えたことを嘘に嘘を塗り固めるのは朝鮮人の始まり ちょっと教えろください。
int型変数二つの足し算でオーバーフローするかどうかチェックしたいのですが、
@decimalにキャストして足し算した結果がintの範囲に収まっているかif文で判断
Atry catchで例外をつかまえる
どっちがいいのでしょう? >>217
Bdecimalではなくlongにキャストして足し算した結果がintの範囲に収まっているか判断 >>217
int_max - a < bなら
a + b < int_maxが成り立つ
でも>218のほうがわかりやすいとは思う 俺がjavaerという事がバレちまったらしょうがねえ
なんだよusingってよ
vb如きだってjavaリスペクトしてんぞ >>217
オーバーフローは同じ符号の値を足した時にしか起こらず、起こった場合は前後で符号が変わる。
他の人が見ても何やってるか分かることが重要ならそれで判定するのが一番だと思う ラップアラウンドとサチュレーションって学生のときに聞いたのが最後だ すみません、初めて見る構造体が出て来たのですが
[StructLayout(LayoutKind.Sequential)]
struct INITCOMMONCONTROLSEX
{
public int dwSize;
public uint dwICC;
}
これは何構造体と読むのですか? イニシャライズコモンコントロールズイーエックス構造体 >>223
構造体名で検索したらInitCommonControlsEx関数が出てくるじゃろ VS2017でC#のプログラムを組んでます。
はじめてVS2017を使うのですが、画面の下に
準備完了 ↑ソース管理に追加
という邪魔なバーが表示されてます。
VS2010にはありませんでした。目障りなのでこれを消したいのですが何か方法はありますか? >>228
ツール->オプション、環境->全般、ステータス バーを表示するのチェックを外す >>229
ありがとうございます!!目障りだったんですよね。 例外処理(に限らず、エラー処理)ってどこまで徹底して行うべきなんでしょうか?
下みたいに、使うインスタンス片っ端から毎回nullチェックとかしてたら、凄まじいコード量になるんですが・・・・・
if(obj == null)
{
return msg;
} >>232
さあ。
でもバグと例外は区別した方がいいんじゃないか。
そのコードは多分バグを想定してるんだよね?
絶対にとは言い切れないが、バグを想定してそれを検出するifは書かないのが普通じゃないか
いやライブラリみたいなものを作ってるならバグを想定して例外を投げるのは普通だけど return msg
してるから まず例外をちゃんと使えてないんじゃ疑惑 デザインパターンでnullオブジェクトパターンみたいの参考にするのは? nullが入るケースがあることを想定している場合にnullチェックを全部書くのがめんどいならnullオブジェクトパターン適用すればいいし
本来はnullが入ってたらおかしいケースならエラーを起こして拾わせるのが正しい構造って回答でいいのかな? ・nullが来ない想定ならチェック不要
・nullケース考慮したくないならnullオブジェクトパターン
・null来た場合にぬるり以外で知らせるならチェックする
・nullのネスト面倒ならnull条件演算子
こんな感じやろか
null非許容参照型使うという手もあるが 読んでる入門書のLINQとラムダうんたらってのが分からなくて
手がstopしてしまっているのですが入門者向けに分かりやすく解説されてるページなど教えていただけないでしょうか?
メソッドの使い方はある程度分かったのですがそれじゃ駄目なんすかね… >>239
LINQやらラムダ使えなくても動くものはつくれるからまぁまずは作ってみよう 最近は、自分でプログラム組まずにランサーズでハイスキルな奴に外注してるわw
中抜きでうま〜〜〜 >>232
チームの方針次第
うちの場合は
nullを許可しない引数と返り値は基本的に全てチェックして例外を投げてる
めんどくさいと思うかもしれないがFluentAssertionのようなライブラリを使えばそこまで大きな負担にはならない
nullオブジェクトパターンはやればわかるがチェックするよりも手間がかかる
また必ずしもnullの場合の適切な動作を定められるとは限らない
適切でない場合にパターンを適用するとそれがnullオブジェクトかどうかチェックするといった本末転倒なことになりかねない
なのでこれが最も適切と確実に判断できる場合を除いて使用しない
C# 8.0が待ち遠しいね >>232
仕様と設計で解決する問題
エラーが出たときどうしたいの?
エラー出たときに別に原因とかわからんでええなら一連の処理をtrycatchで囲ったらええやん
なんか起きたらcatchに入ってくるで >>232
外部とのやりとりの場所は結構厳重にチェックを入れる。
自分で書いているところは適当に流す。
外部とは当該館数のパラメータや、呼び出す関数とかの戻り値ね。
try catch で囲んで、チェックして例外発行して、catch 内でまとめてトレース情報込みでログ出してスローするくらいなら大した手間じゃないじゃない。
その例なら if( obj == null ) throw new ArgumentNullException("ぼーっと生きてんじゃねーよ!"); で済む話じゃん。
>>239
コピペでもいいからたくさん書いてみる。で解決するよ。
やってるうちに理屈が分かるようになる。 昔は開発現場でこっそりExcel型の2chブラウザでネットサーフィンばかりしてたな〜
座ってるだけで月70万むっちゃらくやった >>239
駆け出し時代オープンソース改造してた時にLINQはパフォーマンス悪いと思って見つけ次第foreachに手直しするという逆工程でLINQとラムダ式マスターした 使えば勝手にlinqの快感にハマって抜け出せなくなる LINQもRxも使いだすと元に戻れなくなる
でも性能気にしてstructとforeachに書き直し始めると時間足りない >>246
パフォーマンスのためならなんでforにしなかったん? >>250
Listはしてたよ
あとラムダ式はLINQ→foreachより行数減らす意識持って1行メソッドを見つけ次第ラムダ式に直す工程で習得したな ComboBoxに例えばA〜Dと4つ項目が入っていて、A〜Cは同一計算方法でDのみ特別な計算方法でコード内容が異なり且つ色んな計算をする為コードが長くなる場合の見やすくする為の最初の分岐方法とか書き方とかありませんか?
今はifで分岐した中にあれこれ結果を取ってきて結果を出してるのでifがやたら長く見辛いです。なんかいい方法があれば教えて頂きたいです。 LINQ使うと元に戻れなくなるのはわかるんだけどデバッグしづらくね?
デバッグを想定する時点で初心者なのかな...教えてエロい人 >>252
4っつぽっちの分岐で何がそんなに見づらくなるのかちょっと理解できんよ。
いや、煽ってるわけじゃなく本当に
各分岐先のコードが長くなるっていうのならそれぞれメソッドに切り分けるだけじゃないの? >>252
if(value == d){
d用処理またはメソッド
}else {
a〜c用処理またはメソッド
}
これじゃダメなの? >>252
ComboBoxにブチ込むためのクラスを書いてDは継承 LINQはなかなか身につかんなあ。
とりあえずforで書いといて見直してこれLINQで一行になるんじゃね?と気付いたらいそいそと書き直す感じ。
LINQ脳になってない 例えば処理順を意識しなくて良い場合、通常のforまたはforeachで処理するのと、Parallel.ForEachで並列処理するのはやはり並列処理の方が早い? >>255
質問者の意図とは違うかもしれんがそういうコード書くと怒るやつがいた職場がある
わざわざ継承してうにゃうにゃやらんと怒る
んでできたコードが何がいいのか考えてもさっぱり意味がわからん
本人にメリットを聞いてもさっぱり理解できんというかメリットの話になると必ずボケた返しをする
ありもしない改修を想定してキチガイとしか思えない発言を連発する
そもそも仕様書や設計書に処理がその数で分岐するってあるのに
なんで普通に書いたら怒るんだよ
もうお前とはやってられん
ってとこまでいって仕様書や設計書通りに組んでるのに工数が増えてるのはあんたのせいだ
って会社間の会議になってもまだグチグチ言ってる
その場にいる全員?な状態だった >>259
条件分岐が減るとかじゃないの?
それだけ不具合が減る理屈だが、工数が増えてるんじゃ意味ないな 普通のケースでは継承にしても
条件分岐が別の場所に移動するだけだべ >>258
Parallel.ForEachはオーバーヘッドが大きい
一周に数百ミリ秒かかるくらいの粒度の大きなループでない限りは普通のforeachより確実に遅くなる >>257
foreachならともかくforで書いているなら苦労するだろう >>259
逆のパターンなら数多見てきたけど、そのパターンは珍しいな
if分岐が10以上になるからなんとかしてと言われて継承使ったプロトタイプ渡したら、なぜか基底クラスでif文復活してたことならあるけど C#のforeachってpythonみたいに定義しないでindex取得出来ませんか?forにするしかないでしょうか? >>267
上のSELECT使った実装例はこんな感じ
foreach (var x in items.Select((item, index) => new { item, index }))
{
Console.WriteLine($"index: {x.index}, value: {x.item}");
}
Listか配列かIEnumerabelどれでやってるかは知らないけどもこれで行けるはず forが完全上位互換なのになんで
foreach使うのか?
って今でも思ってるよ俺は
ループにインデックスが必要になったというただそれだけで変更するんだぜ indexが必要でCountもできる時はわざわざindex生成してforeach使う必要無いと思うけどもLinq使いたい時とかIEnumerabelに実装してるものにわざわざfor使わない派 というか戻り値をIEnumerabelにして抽象化しておく事が多いから余計にforeach使うのはあるかもしれない
Linq拡張メソッド作る時とか諸々 >>252
int CalcDefault();
int CalcSpecial();
int Calc() {
if (IsSpecialCase()) return CalcSpecial();
else return CalcDefault();
}
bool IsSpecialCase() => combo.SelectedValue == "D";
とりあえず最初はこれでいいよ
似たような条件分岐が増えてきたらリファクタリングしてポリモー対応できないか検討
最初からポリモーは大げさだからやらなくていい
でも後でリファクタリングしやすいように責務指向でメソッドを切っておくぐらいはやっておいたほうがいい
このへんのさじ加減は経験則だな switchを無くすのに多態なんか使う必要ないね。
すくなくともC#にはデリゲートがあるんだから多態使うぐらいならComboBoxのアイテムに
デリゲート持たせた方がいいよ。
個人的にはこれも本当に可読的か疑問だけど。
分岐素直に分岐で書いた方が分かりやすいって テストするときに圧倒的にわかりにくいコードになんの意味があるの?
バカのやることは本当にわからない 確かに
分岐が多いとテストしにくい
少しならいいけど限度がある 設計書で分岐が100個あったらswitchcaseかifで100個書けよ
それが気に入らないなら設計書直せよ
そういう当たり前の手続きを無視してコード書いてる雑魚に俺は超えられねぇ switch vs 多態って結局プログラムがDRY & SOLIDになってるかどうかって問題に帰着すんだよな
>>255はDRYでもSOLIDでもない
>>275はSOLIDではあるがDRYではない
多態までいけば完全にDRYでSOLIDなプログラムになる
そのコードが一回こっきりで重複がないという前提だと、DRYのありがたみを実感しにくい
だからswitch派が一定数居るのだろうね インターフェイス厨だから似たような分岐はインターフェイスで分けて個別実装か本当に共通してるなら継承でなんとかしたくなる
それと見返したら俺酷いスペルミスしててワロタ cしか知らないのです
vsをダウンロードして独学でc#勉強し始めたのですが、どうにもなりませんです
オブジェクトだのラムダ式だのデザインパターンだの文法的な要素以外に勉強しないとなにを言ってるのかわからない事が多くて、勉強の進め方が間違ってるのだろうと思いました。
初心者丸出しの質問で恐縮ですが、どんな順で何を勉強したら良いでしょう?
また、良書、良いウェブページなどご存知でしたら、ご教示いただければ幸いです
よろしくお願いします。 >>282
物まねでもなんでもいいから何か作りまくれ
用語とかから勉強しなくていい。色々調べるうちに覚える
わからなくなったらやりたいことの頭にC#+スペース入れて検索 必要性がわからない概念を理解するのは難しい
それはコード書いた経験が少なすぎるから
Cもほぼ入門書読んだだけでしょ
とりあえず自分が理解できる範囲の知識でなにか作りたい物つくった方がいい >>282
主にオブジェクト指向関係が分からないみたいだから
オブジェクト指向入門系の本やウェブサイトを探せばいいんじゃないか?
あるいはC#にこだわらないのであればC++の入門書はC言語との違いとして
オブジェクト指向向けの機能に触れているものが多いと思う
実際にプログラム作ってオブジェクト指向の感覚掴みたいなら
個人的にはちょっとしたゲーム作ってみるのもオススメだな
UnityならC#使えるし >>282
勉強の進め方というか基本的な理解が浅いのでは
Cでも構造体ネストして疑似継承くらいするだろうし
ラムダにしてもクロージャ要素はともかく匿名関数
とりあえずクラスは関数を纏めているのではなく
型を作りデータと結び付けているという事だね
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/index
翻訳が割と酷いが公式にもドキュメントはあるよ ご教示ありがとうございます
いわゆるコンソール用のアプリケーションなら、cで充分私が必要とする程度のものは作れるので、わざわざ新しい言語なんか習得したいとは思わないんですが。
やっぱり、GUIのアプリケーションの方が使うとき楽だとら思いまして、なんとかc#勉強して作れるようになりたいなと言うのが発端なんです
vsで参考になるようなところを参照してつまみ食いで作ったのですが、少しでも自分で機能を追加しようとすると、マイクロソフトのクラスライブラリなんか知らないので、なかなか困難で。
おまけにクラスというかオブジェクト指向って奴だと、無闇矢鱈と真似すれば良いという手法が私では通用しなかったのです。
どのようにクラスを作って良いのか基準もわからないですし。
オライリーのc++の本があるので読んだのですが、そこでは電子レンジをモデルにしてオブジェクトの説明をしてくれたのですが、なかなか良く分からず
デザインパターンとやらを先に勉強しておくべきなのかとチラホラ読んだのですが、これもまた実装とは程遠い座学の世界でピンと来なくて泣きそうです。
みなさん、ある程度使えるようになるまでどんな順序でなにを学んだのか、ご教示いただければたすかります デザパタは経験積まないと有り難味が判らないから放置でいいよ
作りたいものを完成させるにはどうすれば近道かだけ考えろ >>289
デザイパターンはある程度蓄積が出来てないとありがたみがわからない、だから、後回しでも良いと言う意見ですね
クラスを作る定石集のようなものだと思ったので、先に勉強した方が良いのかとも思っておりました
定石知らなくても、楽しく将棋はできるのだから、後回しでも良さそうですね
ご意見ありがとうございます vector3Dクラスの内部に
vector2Dクラスは普通は作らないんだぞ
知ってた?
しかし、両クラス共にメンバx,yを保持する
そう、お前らの大っっっっっっっ嫌いな重複だw
しかし、極上のバカでもない限り
vector3Dをvector2D+zで作るやつなんてこの世にいないんだよ
わかるな?
この例ではわかりやすく
XYZで説明してやったが
世の中ってのはこういうもので満ち溢れてるんだよ
xyでもyzでも計算するときがあるのさ
わかりにくいだけで
xyをvector2Dで作ってしまったオブジェクトのyzの計算は不格好なのさ
オブジェクト指向は破綻している
そこをわかった上で付き合うんだ >>287
物に例えるってのは常々ダメだと思うわ、関係ない要素が絡んできて
人に依ってはマイクロウェーブとか出るの?とか思うだろうし
クラス設計としちゃフィールドは構造体と一緒だけどメソッドは…
うん、とりあえず手続き型っぽく作っても良いだろう\(^o^)/
多態性は+演算子の数値なら加算が文字列だと連結になるとかね
C経験はCUIのみという事かな?.NET Frameworkなんか知らん!という事であれば
Visual C++ Windows デスクトップアプリを従来通りWin32で作っても良いと思うけど
手っ取り早くダイアログベースで作成してメッセージハンドラに渡ってきたIDで振り分ける
ぶっちゃけ.NET FrameworkもWin32 APIをラップしてるだけなのでC#も基本は変わらない
フォームデザイナーで弄くってコントロールにイベントハンドラ割り当てるだけ >>292
制御系のプログラムばかり書いているのです
どうかするとロジアナ見てる方が多いかもしれませんが
パソコンの世界はほとんどわからないです >>293
制御系ならCでも自然とオブジェクト指向的な設計でコード書いてたはずだと思う。
「キーをスキャンしてデバウンス処理を担当するコード」とか「LCDドライバーへの表示データの転送を担当するコード」
とか、そういう仮想機械をコード上にいっぱい作ってたはず。
オブジェクト指向のオブジェクトって要はこの仮想機械のこと。
クラスはそれを書きやすくするための仕組みに過ぎん。
だからたぶん心配してるよりずっと簡単な話だと思うよ >>294
私の頭の中はオブジェクト指向とは無縁です。
設計そのものに、そんな考え方を取り入れていないので、どこまでも手続き型で考えてしまうのです。
強いて言えば、状態遷移を作るときに少し似たような考え方になるだろうか、という程度ですね
なにをクラスとすれば良いのか、そういうところがピンとこないので、わからないのです。 いわゆる組み込み系か、それだと逆にこっちが経験乏しいけど、Cライブラリなら馴染みはあるのかな
するとまずはVisual C++からWindowsコンソールアプリをC/C++ライブラリで作ってみるとかかねぇ?
APIとかはC#にしろMSDN…今はMicrosoft Docs?を見るしかないね、C#ならIntelliSenseにも詳細出る
でもC#からなんか制御するとかだと結局プラットフォームのネイティブAPIや専用ライブラリになるか?
とりあえずオブジェクト指向とかを学びたいのであればC++や他スクリプト言語とかでも良さそうな >>295
でもキュー(リングバッファー)ぐらい実装したことあるでしょ?
端的に言えばあれがオブジェクトの一例っすよ。
データ(配列 + 読み出しポインタ + 書込みポインタ)と、
それをリングバッファーに見せかけるコードの組み合わせ
簡単でしょ >>296
言語そのものはどれでも良いと考えています
vsのヘルプを読む限り、同じことができてるようですから
どうせなら、c#を勉強してみたいなと考えております >>297
リングバッファがオブジェクト指向の考え方なのですか。
なるほど。
仮装化したデバイスのようなもの、ということなのでしょうか。ハードディスクのドライバやNICのドライバは確かにアプリケーションからみると仮想的で、実際のハードウェアの持つ機能とは関係なくつかえるようにしますね
少し例えがわかった気がします
ありがとうございました
今日は遅いので、この辺で失礼します private Task<int> hoge{....}
というメソッドがあって
var t=hoge();
でタスク走らせた後、ちょっと別の処理してから
t.ContinueWith(()=>...);
と継続タスクを付け足した場合、
付け足した時点でhogeが終わってれば
すぐ継続タスクの処理を開始してくれますか? なんならTask.CompletedTaskからでもContinueWithできる >>299
オライリーのヘッドファーストオブジェクト指向がおすすめ ついでに、ユニットテストを身につける本をだれか教えてくれんかな
どの入門書もテストについて全く教えてくれんがどうなってんだ・・・・ >>303
どうもありがとうございます
java c#を習得している人が前提の書籍のようですね
オブジェクト指向の勉強には良さそうな本で助かります
javaも知らないので、今度丸善にでも行って太刀打ちできそうか、少しみてから判断しようと思います すまんが、VisualStudio2017についてる.NET Core2.1って、2.2にするにはどうすればいいの?
勝手に入ったんだからVisualStudio周りからアップグレードする方法があって良いような気がするものの・・・・どこにあるんだろ!?
https://dotnet.microsoft.com/download
それともこっからダウンロードしてきて入れちゃえば良いのかな? >>287
動物スーパークラス作って猫クラスと犬クラス作って猫にニャーニャー 犬にワンワンと鳴かせるプログラム作りな
完成したらオブジェクト指向習得
これで月18万の8次請非正規になれるよ
面談では経験8年で勘定系COBOLの経験有りと答えてね >>311
VSのインストーラから入れられるのはLTSだからか知らんが今のところ2.1まで
2.2はSDKで入れてプロジェクト毎にターゲットとして指定すればおk オブジェクト指向は色々勉強するより
ちょっとしたゲームでも作ったほうが分かりやすいと思うわ
モンスターとヒーローを作って相手を攻撃するメソッドと攻撃を受けたときにダメージを受けるメソッドを書いて 終わり 非同期のファイル検索処理を途中でキャンセルしたいのですが
時間がかかる処理はDirectory.GetFilesなので
CancellationPendingをどこに書いても処理が終わるまでキャンセルされないのですが
どう書けばよいでしょうか
https://dotnetfiddle.net/xYNYrk >>316
Directory.GetFiles()の代わりにDirectory.EnumerateFiles()を使う >>315
ゲームはオブジェクトと環境との間のインタラクションが多すぎるからオブジェクト指向を学ぶには適さない
プロでも結局全部グローバルスコープでアクセスできるようにしとけみたいな設計にしかならん 俺が先輩なら新人に自動車クラスとタイヤクラス作らせて型継承でタイヤ交換は容易にするようにと課題出す
出来たら6年選手として売る 新人言うても30歳超えの中途ね
コスパ良いんだわ
年食ってると従順でパワハラにも耐える
そう言えば20代新人とか見たことない
存在するのかね すまんがIT企業の闇と経験年数詐欺の手法はマ板でやってくれんか?
ム板は数年後のプログラミング教育必修化に向けてフレッシュでさわやかな若者向けの板に改装する予定なんだが 早いところプログラミング必修化してほしいもんだぜ
会社の愚痴とブラック会社アピールが「プログラミングのお話」だと思ってるオッサン多すぎ IT業界の非正規形態に未来がなさ過ぎて辛い
いかんいかん 楽しい気持ちでラムダ練習せねば ↓プログラミングを必修化した結果
ttps://pbs.twimg.com/media/DwtF98FUwAIU166.jpg そもそも資格試験は政治家の天下り先がつくってる
いみない
なぜなら資格を作ってるところの役員事態は
知識がないのだから。 文字列から数字をtmpWとtmpHに抜き出すクラスを作りたいのですがどうしたらいいですか?
演算子記号は+−もある、数字の桁数は不明で小数点もあり、数字が入るときは小文字一字始まり、引数はw or hで抜き出す戻り値を示す。
対象文字
@w900×HH
AWW×h1000
BWW×HH
Cw900/h100
結果 引数がwなら左 hなら右
@tmpW=900 tmpH=WW
AtmpW=WW tmpH=1000
BtmpW=WW tmpH=WW
CtmpW=900 tmpH=1000 >>317
ありがとうございます。調べてみます
>>318
ありがとうございます。しかし同じくキャンセル出来ませんでした フォルダの中に万単位でファイル作ってGetFiles()テストしたことがあったけど
10年以上前のPCでも非同期にしなきゃならんほど遅くなかったと思ったけどなあ
普通に遅い原因はユーザーコードの方にあるんじゃないの >>332
文字列を×/区切りの前後でsplit
それぞれの先頭がwhなら以降を戻り値 >>332
今ちょうど過疎ってるお題スレにちょうど良さげなのでお題スレにコピペさせてもらおう。 >>332
Cが難題だな。どうやって実現しようかなぁ >>342
確かに w
まあtypoだろうからスルーしてやれよ 脊髄反射で書いたので添削頼む。
public static string[] GetHW(string input)
{
string[] returnval = new string[2];
string[] temp = input.Split('+','-','*','/');
if (temp[0].StartsWith("w", StringComparison.Ordinal))
temp[0] = temp[0].TrimStart('w').Insert(0, "tmpW=");
else if (temp[0].StartsWith("WW", StringComparison.Ordinal))
temp[0] = "tmpW=\" \"";
else
temp[0] = "それ以外の何か";
if (temp[1].StartsWith("h", StringComparison.Ordinal))
temp[1] = temp[1].TrimStart('h').Insert(0, "tmpH=");
else if (temp[1].StartsWith("HH", StringComparison.Ordinal))
temp[1] = "tmpH=\" \"";
else
temp[1] = "それ以外の何か";
return temp;
} あ、Replaceでよかった。
returnvalも無意味。 1文で
public static string GetHW(string input)
{
return input.Replace("w", "tmpW=",StringComparison.Ordinal)
.Replace("h", "tmpH=", StringComparison.Ordinal)
.Replace("WW", "tmp=\" \"", StringComparison.Ordinal)
.Replace("HH", "tmp=\" \"", StringComparison.Ordinal)
.Replace("+", " ", StringComparison.Ordinal)
.Replace("-", " ", StringComparison.Ordinal)
.Replace("*", " ", StringComparison.Ordinal)
.Replace("/", " ", StringComparison.Ordinal);
} >>332
質問内容はともかく、プログラマならもうちょっと読み手が推測で補完しなくても
内容を過不足なくきっちり読み取れるような文章を書いた方がいいと思う。
ってういか、率直に言って日本語変だよw 文章はともかくサンプルデータと結果を書いてるのは褒めてもいいと思うよ
他の質問者もぜひ見習って欲しい 独学手探りで勉強しながら作っていたアプリケーションが一応形になったので
折角だから公開してみようと思っているんですが、
デバッグやライセンス確認など、リリース前に確認する事、の知識が全くないことに気づきました
少額ながら有料公開にしようと考えている為、
最低限これとこれは確認しないと、って物を教えて頂きたいです >>352
なんのアプリケーションかも分からないし、答えようがない 有料ってことは、不具合に対する改善要求が来る可能性もあるので、責任の範囲(逃げ道)を明確にしておく。 >>349
そこは、「あなた、日本語お上手ですね!」で煽らないと >>313
今の所、普通に使っていて2.2にはならないのか
ありがとう >>332
まあ、適当に忖度して書いてみた
普段正規表現あんまり使う機会がないんでどっかおかしいかもしれん
https://ideone.com/b9pjrG >>352
ヘタしたら訴訟沙汰になりかねないからやめとけ
まずはベータ版として無料で配るとかして様子を見るべき >>352
・C#で作ってるならデコンパイルされても大丈夫か確認しておく
・GPL汚染に注意する ソフトで商売って労力に見合わないな
キラーソフトでも作れればそれだけで暮らせるんだろうけど ニッチな分野か、あるいは既存ソフトより高性能であれば有料でも売れる可能性はある 業務アプリなら大したスキル無くてもやってることがビジネスとして正しくてちゃんと営業すれば売れるよ
今時ツール系で稼ぐのはまあ無理 >>362
業務にての使用を公認されるためには、有料(シェア)ソフトの方が有利なようですよ、秀丸とか ASPばかりしてたらWinFormの作り方忘れた
つか今だにWinFormの案件あるのかね
小ツールはコンソールアプリで作っちゃうから勝手が思い出せない >>346
>>348
ありがとうございます!調べてやってみます! >>367
大手はWindowsServer入れてる率が多い気がする >>368
ASP.NET(かもしくはASP.NET Core)やろってツッコミじゃね? ASPはもうASP.NETに移行済んでるものと思ってた >>358
わざわざ有難うございます!
これも書いて勉強してみます! 開発マシン XP32bitでVS2005で作ったC++のdllを同じくVS2005で作ったC# WinFormアプリでDllImportを使って利用しています。
Win10 64bitで実行するとC++の関数をコールすると
間違ったフォーマットのプログラムを読み込もうとしました。(HRESULTからの例外: 0x8007000B)
となります。
同じ事をwin7 64bitのVS2013で作ったアプリでしても(当然)問題なく動きます。
VS2005で作ったアプリで動かす方法はないでしょうか。 プロジェクト設定でany cpu になっている部分をx86にしなされ >>373
ありがとうございます!
無事動作しました! 新規プロジェクトをVBでやりたがるPMにC#をオススメしたいのですが、C#が決定的に優れてる点はあるでしょうか?
VB読みにくいなんて言っても苦しむのはお前だろ関係ないという雰囲気で ループの評価とコーディング量かな
手持ちプロジェクトをSharpDevelopで変換してみなされ プログラマの品質
実際にC#使うかVB使うかはどうでもいいが、要員をC#経験者に限定することでリスクは格段に下がる ネットに転がってるサンプルコードの量
(ちょっと慣れればすぐに読み替えられるようになるってのは秘密) >>377
担当PGは決まってるんだからそんなこと言っても説得力なし 日本人を説得するのはこれが一番
http://yellow.ribbon.to/~joke/tobikome.html
実際問題.NETの世界ではC#が標準で「みんな」が使ってる。
逆にあえて非標準のVBを使う理由って何なんですかと聞いてやればいい
もう少し合理的な人なら、ラムダ式とか、デリゲートのadd/removeに演算子が使えることとか、
三項演算子とか、null合体演算子とか、代入演算子が右辺の値を返す式であるとか、
プロパティーのいろんな省略記法とか、C#ならいかに簡潔にかけて同じことをVBでやるといかに冗長になるか
具体例を見せてやればいいよ >>380
> ラムダ式とか、デリゲートのadd/removeに演算子が使えることとか、
> 三項演算子とか、null合体演算子とか、代入演算子が右辺の値を返す式であるとか、
> プロパティーのいろんな省略記法とか、
単なる印象だけど>>375のところのPMはそう言うのを嫌いそうな気がする Labelを貼って、そのTextを空白にしたらデザイン画面でクリックできなくなってしまったのですが
どうやって選択状態にしたらいいのでしょうか >>382
デザイナで以下のどれかの操作をする
(a) [ctrl] + z
(b) マウスでそのラベルがあったあたりをドラッグ
(c) [ctrl] + [alt] + t
(d) プロパティウィンドウの上部のドロップダウンで選択 >>383
ありがとうございます
C案でやらせていただきました PM的にはVBのが簡単で人員の確保が容易との理由ですが、イベントリスナにクラスレスで全処理書くベテランエンジニアの意向を汲んでるんだと思います
自分はサンプルの多さとC系で無い記述に不慣れという理由でC#を希望しましたが、ベテランに寄せられるんだろうなと諦めムードです
ちなみにベテランのスマートUIは芸術の域で若輩の自分には追従不可です
コード量も多く見積りが高く出来るとPMからも信頼されています 今2019年やぞ……。
生産性を上げる技術を入れる気が無い、そのPMにはC#のメリットはメリットに見えないだろうなぁ。
ベテランは古い技術と心中できるけども…… ループ内で一時変数宣言したらコストが増えるってのを知って
新しいブロック作って変数宣言してみたけどなんか見た目がすっきりしない
ループ内の変数宣言の新機能とかないのかな >>386
生産性って言葉は立場や状況によって指してるものが変わるんやで ソフトウェア作れると言うとソフト作って売って大儲けできるんじゃないかと
よく言われる
世間はそういう感じで見てる 権力持ってる人がVB推しなら決定でしょ
できることはほぼ同じだし諦めな >>387
コストが増えるってローカル変数が増える事?
初期化するスタックの増加やレジスタに乗りづらくなるとか?
さほど気にするもんでも…とりあえずAnyCPUで64bit優先オヌヌヌ >>386
意識高めても虚しいだけだよ
10年この仕事して啓蒙もしたけどなにも変わらなかった
9割5分の人材はそもそもシステム開発に興味ないから啓蒙しても無駄
転職するか割り切るかどちらかしかない
環境を変えようと思ったら負け パズル言うほど難しい問題出てない気が...
どっちかっていうと質問自体の方がハズ(
正規表現便利だけど他人の書いたの読むのキツいよねw
しょっちゅう使ってれば違うのかもしれんが ややこい正規表現の場合
コメントで想定okパターンくらいは書くようにしてる フォームアプリケーションにtrackbarを2つ用意して、
pcに接続されたモノラルマイクの音量(感度?)とパンニングをそれぞれ操作したいんですが
適当な検索ワードがわからずにたどり着けませんでした
できるだけシンプルに、どう書けば可能でしょうか? ググったらこんなのが出てきた
読んでないけどなんかすごい面倒くさそう...
https://web.archive.org/web/20060712054058/http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html 質問です
ファイルの移動を扱う自作メソッドの結果を扱うクラス(Aとする)を作りました
このクラスに
class A{
...
public static A Output_IsCanceled(string 元のファイル) {
//引数を受けて動作をキャンセルしたことを示す結果を返す。
}
}
のように典型的な結果を出力するメソッドを追加したのですが、
このAを継承したクラスBにこのメソッドもこのメソッドを上書きしたメソッドも実装させたくありません。
なにかスマートな解決方法はあるでしょうか。
私には大人しく別のクラスに移すくらいしか思いつかないのですが。 >>399
そのメソッドを外したクラスを作ってクラスAとクラスBに継承させる なるほど 言われてみれば簡単でしたね
ありがとうございます object型の変数に入れた匿名クラスのプロパティを取得する方法で
詰まっております。
object hoge = new { fuga = 1 };
int a = hoge.fuga ←こういうイメージで取得したかったのですが。。。
ご教授よろしくお願いいたします。 >>404
Dapperの引数がobject型だったのですが、Dapperに渡す前の
匿名クラスのプロパティの値を元に一つ条件式を作りたかったんです
object型の匿名クラスからどうやって値を取るのか興味もありまして >>405
無理
渡す先の引数がobject型だからって変数の型をそれに合わせる必要はないだろ
var使えよ >>403
リフレクションを使った力業
var a = ( int )hoge.GetType().GetProperty( "fuga" ).GetValue( hoge ); >>403
int a = ((dynamic)hoge).fuga;
てしたら取れた。なおインテリセンスはきかない。 >>409
値が取れました。ありがとうございます。
結構トリッキーになるみたいなので
多用は避けた方が無難かと学びました
しかし、Dappreはさらにプロパティ自体も自前で取得するので
手練れの外人は違うなと >>411
Type.GetProperties()でプロパティの一覧が取得出来るよ。
foreach ( var propertyInfo in hoge.GetType().GetProperties() )
{
var value = propertyInfo.GetValue( hoge );
Debug.WriteLine( $"{propertyInfo.Name}={value}" );
} >>412
なるほどそうやるのですね
知らないことが多いので参考になります Androidの実機持って無いんだけど、もし、完成したC#のアプリが有った場合、
DownLoad から、実行まではどうすればいい?
.Net のインストールから始まるの?
C#アプリはGooglePly からDLするの? それとも自前のWebサイト? WPFって、最初のGUIデザインはデザイナで出来ますが、ユーザーの入力に応じてGUIを変化させたい場合
(例えば、テキストボックスに3と入力したらラベルを3つ追加するとかの場合)
xamlではなくC#のソースコードでコントロール追加せざるを得ないのでしょうか? >>415
よく考えよう
その例の場合、お前はコントロールを追加したいんじゃなくて表示対象の文字列を増やしたいんだろ?
C#からは「表示対象の文字列を追加する」操作だけをして、コントロールを追加するのはバインディングに任せるのがWPFの思想だ
>>417は間違いで、ググるべきキーワードは DataTemplate
コレクションに文字列を追加するだけで勝手にコントロールが追加されるようになる ちなみにWebなら上記のようなまどろっこしいことをしなくてもRazorテンプレートの中に直接forループを記述するだけだ
WPFの難解なバインディングは概念ばかりが先行してユーザーを置き去りにする典型的なMSの失敗作 上の人はワケワカラン書き方しているが、wpfではListBoxのItemは自由にかけるから、そこにLabelを配置して追加削除をやるってのが定番ね >>420
間違い
Itemsには文字列のコレクションをバインドする
でItemsTemplateでDataTemplateを適用させてLabelを生成させる WPF は知らないけど、一般的に、JavaScript の状態管理なら、
Vue.js, Nuxt.js など、状態管理用のフレームワークを使う ここは今からjavascriptのスレになりました 最近、業務システムはデータベースとデータ操作言語が8割でC#はさほど重要じゃないんじゃ。。。
と疑うようになってきました
C#が主役の開発って、ゲームくらいですかね >>425
それも統計に嘘がある可能性あり。以下、各社各様、自分に都合の良いことを行っている:
一般人:「Androidのアプリの大部分は Java である」
Unity:「百万種類以上あるゲームアプリの半数が Unity(C#)製である」
Adobe:「Flash製ゲームが、100万種類を超えた。」
日本人:「日本の歴代で一番売れたゲームは、Final Fantasy xx で、700万本(売り上げにして500億円程度)」
外人:「MineCraft というゲームの売り上げが一兆円越えた。」 誤: 外人:「MineCraft というゲームの売り上げが一兆円越えた。」
正: 外人:「MineCraft というゲームの売り上げ本数が一億本越えた。」
Flash に関しては、「one million games」みたいな言葉を使って、
Adobe が「自慢」していたんだそうだ。 >>425
ミクロサービス開発するとデータベース殆ど触らなくなる
EF便利 C#のデバッグ画面の診断ツールについて質問です
メモリ使用量のプロファイルはデフォルトで無効だと思うんですが、いつの間にかクリックしてしまって
有効になったまま無効に戻せません
VCの場合はクリックすると元に戻す出来る場所があるのですが
レジストリをいじらないと駄目なんでしょうか? とりあえずVisual Studio Community 2017だと
診断ツールウィンドウの左上の歯車クリックで出るドロップダウンの
メモリ使用量のチェック外したら次のデバッグから消える
つかデフォルト有効じゃなかったっけ オンにした記憶ないし C#の話じゃないのかもわかんないけど、ちょくちょく出てくる「コンテキスト」ってのが何者なのか未だに理解できん
プログラムの単位で!?処理の中断・継続等を担ってる!?!?とかなんとか説明されてるけど意味がわからん
こいつは一体どういうもんなんじゃい? >>432
何年もC#使っているけど「コンテキストメニュー」しかわからん
またJavaの話じゃないだろうな >>433
ASP.NETでもEFでもXamarinでのモバイル開発でも、何しててもコンテキストが出て来まくるじゃない >>432
「文脈」という意味で、例えば、Graphic の Context の場合なら、
・現在の foreground color
・現在の background color
・現在の font
・「カレント座標」 (MoveTo() などで設定する LintTo() の開始座標)
・現在の Clipping 領域。
・現在の 原点の位置。
などを記録しているオブジェクトのようなこと。だから、もし、同じ
Window に対して 2つの Graphic Context を持てば、それぞれで別々の
カレント座標や、foreground color、Clipping Region を持つことが
できて、瞬時に切り替えたりできる。これが、Win32 の Device Context
に相当する。
---------------------------------------
CPU の Cotext の場合、IA32BIT の場合なら、
汎用レジスタ: EAX, EBX, ECX, EDX, ESI, EDI、EBP
命令ポインタ: EIP
スタックポインタ: ESP
フラグ: EFALGS
セグメントレジスタ: CS, DS, ES, FS, GS
浮動小数点レジスタ: ST0〜ST7
などが該当する。この Context を細かく時間を区切って切り替えることで、
MultiTask が実現できる。MultiCore CPU の場合は、それぞれの Core が
別々の Context を同時に持っていることになる。 >>435
ただし、JS の canvas の context は、1つの canvas に対しては、1つしか
持つことが出来ないとされており、
var ctx1 = canvas.getContext("2D");
var ctx2 = canvas.getContext("2D");
のようにしても、ctx1 と ctx2 は同じ値が返ってくることになっているらしい。 >>435
誤:CPU の Cotext の場合、IA32BIT の場合なら、
正:CPU の Context の場合、IA32 の場合なら、 >>432
コンテキストの意味はコンテキストに依存するのでまずはどんなコンテキストで話してるのかはっきりしてくれ Xamarinって言ってるからAndroidのContextクラスもありそう >>438
紙に絵を書く場合に、色んな筆に予め色を載せておいて、必要なときにすぐに
目的の筆を選べるようにしておくと便利。その筆が context。
これだけだと単なる「brush」に過ぎないという突っ込みも有り得る。
実際のcontextは筆だけでなく、場所まで覚えてくれていたりする。 >>442
まあ、そうなんだけど、プログラミングにおける「context」というのは、
HDC と大体似たようなニュアンスを持ってると思う。 日本語で、「この文脈では」「文脈をわきまえて」というものがあるけど、
直前に直線の描画を終えたばかりの「最後の座標」を覚える、っていうのが
それに近い。最後に使った色を今後も使う、最後に使った座標から、
また、直線を描き始める・・・。
お葬式では暗い顔して暗い服を着る、結婚式では明るい顔する・・・。
悪いニュースは暗い顔で読み、良いニュースは楽しそうに読む・・・。
それが文脈、context。 それはそうと、.Netで書かれてるらしい MasterSeeker.exe と HNXgrep.exe
がWin7で劇遅になった。特に起動。XPではとても快適だったのに。
起動速度が多分、3〜5倍くらいになった気がする。
Win32/MFCで書かれたアプリでは経験したことの無い現象だと思う。 >>432
そんなこと考えても時間の無駄。
contextの意味もcontext依存だから。
その文脈でどういう意味で使われてるか読み取るしかない。
英語ってそういう言葉でしょ?
コンピュータプログラムのcode、暗号のcode、符号のcode、
これらから還元してcodeが何を意味してるのか考えても意味ないのと同じ 管理者権限を必要としないで動作するソフトを作成しました、。
仮にバグがあったとして、そのバグを突かれて攻撃された場合に権限昇格等の事態は発生しますか? アプリケーション1とアプリケーション2の間でメッセージをやり取りする必要が出てきたので、SendMessageを使ってもう一方のテキストボックスに
メッセージを送り、TextChangedのイベントで受け取りを判断するようにしました。
ところが、アプリケーション1→2は成功するのに、2→1はうまく動作してくれません
(テキストボックスに送られたメッセージは表示されますが、テキストボックスがChangeしたとは判断されていないようです)。
原因がわかる方いらっしゃったら教えてください。 formにフォーカスしたときにスペースキーを押すとkeydownで拾って処理ということをやってるけど
スペースを押すタイミングでform内のチェックボックスがチェックされたり消したりするけど止めることは出来ますか?
ヒントを教えてください。 >>448
所詮ローカルアプリだろ?
そんなもんにセキュリティの考慮なんぞ要らん
正当なユーザーに悪意があれば自分のPCの権限制御なんぞどうとでもなるし、
権限のない第三者が悪戯できない程度には今のWindowsのセキュリティは堅固だ >>452
ClickOnce…一般ユーザーがインストール…悪意があったら…
うっ…頭が >>450
・KeyDown用のコントロールを設定しForm全体でキーを受けるのをやめる
・別のコントロールに常にフォーカスが当たるようにする
具体的にはクリックイベントやForm.Shownのイベントメソッドを全部作ってControl.Select()かControl.Focus()を入れる
・Formからチェックボックスを無くす
下に行くほど下策。他にもあるだろうけど他の人に任せる >>450
基本的にはそれあなたの仕様そのものがバグってる。
WindowsのUIのお約束に反するようなUIを作ったらあかん。
どうしてもならSetStyleを呼んでCheckBoxが入力フォーカスを持たないようにするのが筋だと思う。 >>458 >>459
フォーカスを何とかすることを考えます。とても為になりました。ありがとうございました。 質問です
100msとかの短い間隔で繰り返す場合、
Systems.Timers.Timerを使って処理を繰り返すのと
while中にSleepかTask.Delayで間隔をとって繰り返すのとでは
どっちが処理がはやくて負荷が少ないですか?
またそれぞれのメリット・デメリットがあれば教えて欲しいです >>463
Sleep() 自体はそんなに積極的に使うべきものではない。ただし、
「逐次処理」で書いたほうが書きやすいような場合に使うと便利
な場合がある。例えば、単なる繰り返しではない、以下のように順にコードを
実行していくような場合:
(処理1)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理2)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理3)
・・・
ここで、処理1、処理2・・・の内容がほとんど同じような場合は、Timer を
使うべきだが全く違うようなものが10個も並ぶような場合だったら、Sleep()
を使うと楽。
SetEvent() などの同期オブジェクトを待つ WaitForSingleObject() などがサポート
されてない環境において、何かのフラグが立つのをポーリングして待たざるを得ない
ような時に、間に何も「はさまない」でループするとCPUがフルパワー状態で回って
しまって電気の無駄使いになるのが、Sleep() を「はさむ」と、Sleep()に指定する
待ち時間がたとえ短時間であっても、Sleep() の中で待ってる間は CPU が HLT 状態
になるので、電力消費を劇的に抑えることが出来る。
WaitForSingleObject() などが存在する環境では、Sleep() は余り使わないで良い。 >>463
役割が全部違う
Sleep
指定時間の間は同じスレッドでのGUI等の入力が停止する
Sleep/Task.Delay
(実行後に)確実に指定した時間が停止する
Timer
指定した間隔で実行される 【参考】
Sleep() の意味は、待つときに、HLT 命令を使うこと。HLT 命令は、特権命令なので
ユーザーランド(一般アプリ)のプロセスでは実行できないため、OSのAPIで実行して
貰うしかない。なお、マルチタスクOSで、HLT 命令を実行すると、他のプロセスに実行が
移ることが多い。
多くのアーキテクチャに置いて、HLT 命令は、「busy wait」で待つよりも、
劇的に電力消費と熱の発生を抑えることが出来る:
https://en.wikipedia.org/wiki/HLT_(x86_instruction)
Almost every modern processor instruction set includes an instruction or
sleep mode which halts the processor until more work needs to be done.
In interrupt-driven processors, this instruction halts the CPU until an
external interrupt is received. On most architectures, executing such
an instruction allows the processor to significantly reduce its power
usage and heat output, which is why it is commonly used instead of
busy waiting for sleeping and idling. >>463
どっちにしろそんな違いがプログラムのパフォーマンスに影響なんかしないw
そもそも可読性よりパフォーマンスを優先する時代じゃない。
つまりより可読的な方法を選択すべき。
一定間隔で処理を繰り返すなら普通はタイマーを使った方が可読的でしょう、
繰り返し終了後に別の処理を継続させたい、みたいな事情があればあえてループ(つまりSleep)を
選択する場合もあるかもしれない >>465-468
みなさまありがとうございます。
特にSleepの解説は勉強になりました。
パフォーマンスも特に影響無いようで、
一定間隔で処理するのでTimerを利用することにします。 this.Close()でアプリを終了させた時、
デバッグモードだとProgram.csの方でエラーが表示されますがこれは気にしなくていいエラーでしょうか? WinFormsのデスクトップアプリでVSyncを待つコードを教えてください
Unityなとのフレームワークやゲームエンジ、DirectXラッパーを
使うことは許されていません >>472
P/Invoke禁止とは言われてないのだな
ではD3DKMTWaitForVerticalBlankEventを使いましょう
名前はD3Dとありますがgdi32にある関数なのでDirectXではないと
糞ルールを決めた上司に主張しましょう >>468
可読性という理由でラムダ式の表記禁止して5,6段のネストは許されている俺社 あるフォルダ(A)内に不定期に作成されるファイルを、ローカルのフォルダ(B)に一定間隔でコピーします(フォルダ内全てではなく、前回からの差分ファイルをコピー)。
今回コピーしたファイルを使って後続処理をしたいのですが、どのようにしたら今回コピーしたファイルだと判別できますか?ファイル名にはタイムスタンプが入っています。
コピー後にA内のファイルを削除などできず、コピーのみ可能です。 >>477
データベースにヒストリを保存すればよろしいかと >>477
別のフォルダに "<ファイル名>.trigger" みたいな一時ファイルを作って処理後に消せばいい >>477
ありがとうございます。
コピー済みのファイル名をDBに保存しておき、そこにないファイルは新規ファイルとして処理する。
こんな判断になりそうです。 Unsafe.の質問ってここじゃ不適切だよね
と言ってもここ以外にまともなC#スレはないようだけど 相談室スレでもいいよ 多分回答者はこのスレと共通だけど Dictionary 型の自動ってないですか。
とあるキーに対してInsert/Updateするとき、
いちいち ContainKeys してから Add するかしないか、ってのがイケてないと思うのですが
dicHoge["Key"] = "hoge";
ってしたとき、Key がなかったら Add して、あったら値を差し替える、みたいな動きする標準クラスないですか? >>483
ConcurrentDictionaryのTryAddとかTryUpdateとか >>483
自動って表現が新しいw
確かにそんなメソッドがあってもよさそうだけど、
たぶん分かりやすい命名がしづらい割には単純にRemove後のAddで
実現できちゃうから用意されてないんじゃないかなと想像 多分無いのかな?
「dictionary 拡張」で調べると拡張コードが出てくるからこの辺りから必要なのコピペして関数増やした方が早いかも dicHoge["Key"] = "hoge";
これの何がダメなの? >>483
> dicHoge["Key"] = "hoge";
> ってしたとき、Key がなかったら Add して、あったら値を差し替える、みたいな動きする標準クラスないですか?
Dictionary<TKey, TValue>はまさにその挙動だが 何か別の言語と勘違いしてんのかな
C++のmapみたいに存在しないキーにアクセスしたら自動的に初期値が入ればいいなと思ったことはある
var d = new Dictionary<string, int>();
d["a"]++;
こういうのできたら楽 そーいえば、ちょっと便利な Dictionary を作りたくて、これの完全ラッパーなクラスを作ったことあったな。
いまから考えれば無駄な労力だと思うが。w そんでDictionaryのインデクサが要求そのまんまの挙動であることについてはどういう見解なのだ
なんでそんな質問したんだ
気になるだろ .Addメソッドも存在してるから
初見だと[]=valueがAddOrUpdateだとは思えないのはまぁ分かる >>474
ありがとうございます
D3DKMTWaitForVerticalBlankEvent に渡す
D3DKMT_WAITFORVERTICALBLANKEVENT の
以下の3つはどのように取得すればよいのでしょうか
D3DKMT_HANDLE hAdapter;
D3DKMT_HANDLE hDevice;
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; var dicHoge = new Dictionary<string, string>();
dicHoge["Key"] = "hoge";
って、いきなり出来ちゃうんですか。
ダメと思って試しもしなかったです。 System.Data.DataTable なんて使ったら悶絶しちゃうかもな >>495
俺も最近似たようなもんが欲しくなったときがある
・重複したときに別の処理が必要
・登録した順番が重要
ってときにDictionary自体使わんで
KeyValuePairのListばっかり使うようになった
つーのはログの出力まで出したいときに登録した順に出したいから
ログ出力するもんにはDictionary使わなくなった >>503
入れたときじゃなくて別のタイミングで出したい
順番に保証がないと困る
って場面 つかそれKeyは何なんだよ
それがキー項目である必要あるのか? >>504
dict[key] = value;
mySpecialLogger.Log($"dictに追加したぞ: {key}, {value}");
----
mySpecialLogger.Flush(); SortedListやSortedDictionaryでいいだろ >>501
できました、ありがとうございました
IDXGIOutput::WaitForVBlankは呼び出すまでがよくわからないし
P/Invokeだけでできるのかもわからないのでやめておきます ReadOnly=trueのテキストボックスをクリックしてしまった時に
フォーカス映ってカーソルがチカチカしないようにしたいのですがプロパティ上で設定できないのでしょうか? GotFocusのたびにWindowsAPIのHideCaretの呼び出しが必要じゃないかな >>512
コピーを想定してそうなってるので、TextBoxを使うならその仕様は買えない方がよいのでは。
コピーなんかできなくてもいいなら素直にLabelを使いましょう。
BorderStyleやBackColorをいじればTextBoxに近い外見にも出来る テキストボックスの上に後付けでボタン配置したので、ポインタずれて押しそこなった時にそんな感じになってしまったのです
まあ動作的にはなんの問題もないのではあるけど>>513のイベントハンドラ作ってみます
ありがとうございました rar5をオンメモリで解凍、ストリーム取得できるライブラリは無いですか? web上の画像をダウンロードせずに
高さと幅を取得する方法があれば教えてください >>519
回答ありがとうございます。
SevenZipExtractorですが、プロジェクトにNugetで取り込んでも正常に認識してくれず使えませんでした。
SharpCompressですが、(まだファイルの一覧だけしか試していませんが)RAR5での圧縮ファイルを扱えました。
SharpCompressは前に使っていたことがあるので(当時はRAR5が使えなかった)、こちらを使おうと思います。 vs2013なんですけど、バーコードを作るメジャーな方法って何があるでしょうか?無料がいいです。 何かライブラリ無いかなと思ったらまずNuGet見てみる C#で書いたコードをVBAから呼び出す際のC#でのやり方を教えてください。
例えば、MessageBoxで「Hello!」と表示するには何をどうすれば出来ますか?
使ってるのはVisualStudio2017です。 >>530
引数でHelloを持ちかえる方法です。 >>530
ググレカス
C#で実装したコードをVBAとかVBから使う方法 : 実験ぶろぐ(仮)試供品
https://needtec.exblog.jp/21522702/ https://gist.github.com/katabamisan/5231237
上記サイトのIniFileクラスでBufferExpandingSizeを小さくしてから
GetSectionNamesを呼び出すとループ2回目のGetPrivateProfileString呼び出しのタイミングで
例外も発生せずにプログラムが異常終了してしまうのですが何が問題なんでしょうか? >>533
書いてるコードの意味がよくわからないので単純なコードが知りたいんです。 コードコピペして自分の使ってるクラスに直せば出来ると思うけど
インターフェース作ってなければクラスから作って置き換えればサンプルコード通りに動くはず >>535
C# メインルーチンからメッセージボックスを表示
VBA shellを使って↑を起動 >>534
GetPrivateProfileStringの定義がCharSet.Unicode指定してるから
第5引数のnSizeはwchar_tの個数を指すことになる
wchar_tは2バイトだからnSizeに16指定したらlpReturnedStringは32バイトあることになる
でも実際にはその半分の16バイトしか確保してないから
GetPrivateProfileStringが17バイト目以降に書き込もうとしてヒープ破損する >>538
文字セットのことがすっかり頭から抜けてました
WinAPIを使うなら真っ先に気を付けないといけない部分なのになあ
・ReAllocCoTaskMemで確保するサイズをlength*2に変更
・GetPrivateStringのCharSetをAnsiに変更、文字列への変換をPtrToStringAnsiに変更
上記2通りの修正でどちらも正常動作することが確認できました
回答ありがとうございました VS2017使用。
ADOを使ってエクセルのシート名を読んだりセルのデータを読み取りたい。
対象エクセルブックは〇〇.xlsのみ
ネットのサンプルコードをコピペして使ってもエラーでさっぱりです。
何かインストールが必要なんですか?それとも参照設定とか必要なんですかね?
なんか雛形のコードでもあればいただけませんか? 具体的にどのサイトのコードを試したら
どんなエラーメッセージが出たのかを書いてくれ https://qiita.com/OneK/items/c3077aea595635f40ee5
このサイトの下のコードです。
adp.Fill(dt);←ここでエラーです。
return dt;
}
今パソコンから離れたのでエラー内容は忘れましたが何かがないぞみたいな感じでした。 >>543
これも明日試してみます。
でもいろいろとコードの引き出しがあったらいいなって >>545
ウゼェ、やる気がねーなら
エロゲでもやってろ こんばんはよければ教えてください
c#で社内用のソフトをしこしこ作っているものなのですが、同じ境遇の方ヘルプファイルはどの形式で
作っていますか? chmファイルは今時便利なツールもないので作りにくいのですが、pdfではなんか味気ない
今回新たなソフトを社内でリリースするので悩んでいます。
あ、ちっちゃい会社です。 > pdfではなんか味気ない
その謎の価値観を改めればすべて解決です >>547
sandcastleでchmやHTMLのヘルプを簡単に生成できるよ >>548
C#のコメントからヘルプを生成する話だよ >>555
ソースコードから生成しないのは非効率でしょ ソースコードから設計書出すならわかるけど、今回の質問はヘルプファイルでしょ? 社内ならConfluenceみたいなwiki的なサービス使えば?
ファイルで配ると後でメンテに苦労することになるよ >>557
C#のスレなんだからヘルプと言えばクラスリファレンスだろ ユーザー向けのヘルプファイルだろ
質問した本人出てこないから結論出ないけど 簡単なゲーム作ってみたのだけど仮にこれを配布するとしたら
動作環境は何を基準にして明記したらいいのでしょうか
Windowsの人なら特になにか入れてもらわなくてもだいたい動くってことでしょうか 対処にした.netでしょう。
win7はデフォだと3.5
win8がデフォだと4.5
win10はデフォ4.6がはいってる。
win8とwin10は3.5系はデフォでは入ってない。
一般的には、4.5で作っておけばトラブルは少ない。
async awaitも使えるし、入ってることが期待できる。
.net coreは開発者でないと、入れてることは期待できないので、入れてもらう形かね。
一般の非開発者は、.net framework と .net coreの二系統に大きく別れてるとか
知らないので、coreは注意が必要かもねぇ むしろCoreはランタイムをSelf-containedにできるから実行環境の状況を気にせず済むでしょ
(まだデスクトップアプリの開発環境として整ってるとは言えないけどそれはそれ) >>563
4.5はもうサポート切れだからだめやろ 今更新規でFull .NET使うのはお勧めできないな
結局.NET standardはMSが早くも投げ出して崩壊し、今後は.NET Coreに一本化される
既存の.NETアプリは全てレガシーの産廃だ >>566
ASP.NET Coreも、3.0からは.NET StandardじゃなくてCore3.0だけをターゲットにするしねw 指定のdatetimeまで待つ処理はどのように書けばよいでしょうか?
GUIアプリケーションで出来れば待っている間も操作可能
なるべくcpuの負担が軽くなる方法が良いです
よろしくお願い致します。 >>568
それは、まず、タイマーを起動して、1秒間に一回程度、自前の関数が
呼び出されるようにしておく。そして、その自前の関数で現在の日時を
取得して、条件に合う日時になっているか調べる。そして、条件に合って
いれば、好きな処理をする。そうすればいい。 >>569
Thread.Sleepの方がいいんじゃね? >>570
それだと GUI の処理がほぼ完全に止まってしまい、アプリがほとんど操作不能
になるハズ。 >>568
アプリが起動しっぱなしなら指定日時から現在日時を引いて
await Task.Delay()等でタイムアウト待つとか、他は>>571かね >>572
待つロジックをThreadにすればいいだけじゃね? マルチ・スレッドというのは、プログラミング経験を沢山積んだ人が使うもので、
非常に原因の特定が難しいバグを引き起こすことがあるので、初心者には
お勧めできない。同期オブジェクトや atomic アクセス、volatile などを
正しく理解してからでないと危険を伴うことがある。
async も独特で複雑なことをやっているので、プログラミング初心者が、何が起きて
いるのかを理解するのは難しい。なんとなく動くかもしれないがうかつに使うのは
やめたほうがいいと思う。 GUIちゅーてんだから普通にWinforms/WPFのTimer/DispatcherTimerを紹介すりゃええんでないの
数日間待機させたいとかになるとまた話が違ってくるしもうちょい質問の要件をハッキリさせて欲しいけど 指定日時後の起動はタスクスケジューラに任せた方が良いと思う
GIU側の仕事はスケジューラヘの登録と指定日時にスケジューラが起動したプロセスとの通信 なんか、JavaScript そっくりになってきる。JavaScript は汚いのにな・・・。 JavaScriptそっくりもクソも、JavaScriptのasync/awaitはC#が発祥だぞ
それをJavaScriptもPythonもKotlinもそっくりそのまま真似した
汚い機能だと感じる君の感覚は否定しないが、好みは別にして非同期プログラミングのデファクトスタンダードであるのは事実だ 割り込んですまない。
SolrNet を使ったことあるヤツがいたら知恵を貸して欲しい。
SolrNet を使ってこんなことをやってみた。
Startup.Init<[適当なモデルクラス]>( [SolrのサーバーURL] );
var solr = ServiceLocator.Current.GetInstance<ISolrOperations< [適当なモデルクラス] >>();
まあごく当たり前の初期処理なのだが、実行すると2行目の Current の中身が null でヌルポエラーになる。
原因がわからなくてしばらく悩んで、GitHub にあるサンプルコードをダウンロードしてきてコピペしても同じだったのだが、
ダウンロードしたソリューションをビルドして実行するとこの部分を問題なく通過する。
またしばらく悩んで、nuget でダウンロードしてくる SolrNet のバージョンに違いがあることに気がついた。
どうやらバージョンが 0.5 以下だと通過し、それ以降のバージョンだとヌルポエラーになるようだ。
最新のは 1.0.1 だったか、このバージョンで上の部分を通過させるに必要な事はなんだろう。心当たりがあったら教えて欲しい。
0.5 の辺りって、その辺りを境に他のパッケージを参照するようになってるぽいのだけど関係があるだろうか。
これを使えってご指定なんだよな。。 >>568
一応これでできるけど、これがベストかどうかは知らん
private static async Task WaitTillAsync(DateTime dt)
{
var now = DateTime.Now;
var span = dt > now ? dt - now : TimeSpan.Zero;
await Task.Delay(span);
}
private async void button1_Click(object sender, EventArgs e)
{
await WaitTillAsync(DateTime.Now.AddSeconds(10));
MessageBox.Show("10秒後にこんにちは");
}
>>566
マジですかw >>585
それだとNTPで時計合わせが発生したらズレる
素直にSystem.Timers.Timerで500ms位ごとにElapsedさせて、
指定時刻を過ぎてないか見るのが簡単。
マイクロ秒まで精度出したいっていうのなら、そもそも使うOS間違ってる。 みなさんありがとうございます。
一応自分で書いていたのは>>585さんに近くて設定時刻前ならそのまま、設定時刻を過ぎてたら一日足して現在時刻との差をawait Task.Delayしました。
タイマーの精度はそんなに必要なく1分間隔で大丈夫で、24時間起動で毎日朝8時から夕方17時までプログラムを止めるみたいな感じです。
同じプログラムを大量に起動するので処理はなるべく軽いのが希望で
ループ処理で毎分チェックするようなのは重いイメージがあるのですが大丈夫でしょうか?
また、時計合わせが発生したらズレるというのはどういうことでしょう? >>588
ポーリングが嫌ならタスクスケジューラを使えばいい
プログラムから簡単に登録できる >>586
えらい重箱の隅だけどまあそうだねw
private static async Task WaitTillAsync(DateTime dt)
{
await Task.Run
(
() => { while (dt > DateTime.Now) Thread.Sleep(500); }
);
} >>590
プロセスが落ちることを想定せよ
NTPなんかより遥かに影響を受ける可能性の高い事象である
やり直し >>590
Thread.Sleepの所Task.Delayにしても大丈夫でしょうか? >>592
どこでも
質問者は24時間起動って言ってるんだから当然想定すべきだよ >>593
もちろんいいと思うけど、
() => { while (dt > DateTime.Now) Thread.Sleep(500); }
が
async () => { while (dt > DateTime.Now) await Task.Delay(500); }
に文字数が増えて、使うTaskも増えて、かといってメリット無いような気が await, async は、簡単なことを難しくしてしまう。 C#は、もはや、C++やCとは似ても似つかなくなってしまってる。
control flow がめちゃくちゃ複雑で、何をやってるのかわからなくて
生ポインタの1,000倍危険。 () => { while (dt > DateTime.Now) Task.Delay(500).Wait(); }
の方が素直か。
何かTask.Delay使った方がいい理由ってあるかな PDFファイルからテキストを抽出する方法でオススメはありますか?
調べたところiTextSharpとPDFBoxは見つかりましたが、たまに読めないPDFがあるのが残念です。 >>599
一番確実なのは製品版のAcrobatを使うことではないでしょうか >>598
この流れでもう二回書かれてるけどawaitしないとその間メッセージキュー処理できないでしょ
あとTimer使えば済むロジックを自分で書かないの >>601
私の技術力が低いので初心者用スレで質問させていただいたのですが、それを購入したとして初心者でもネットで調べる程度で可能ですか?
上に書いたiTextSharpとPDFBoxは、ネットに転がってたソースを丸パクリでやりました。 >>595
後者はTask.Run()が不要だから、むしろタイプ量は減るよ。
await Task.Run( () => { while (dt > DateTime.Now) Thread.Sleep(500); } );
と
while ( dt > DateTime.Now ) { await Task.Delay(500 ); } ん? Task建ててる部分見てなかった、俺のレスのは忘れて 後、細かいことを言うと、
Task.Run()でThread.Sleep()だとSleep()してる間もThreadPoolのThreadを1つ占有してしまうが、
Task.Delay()ならその間はThreadPoolのThreadが開放される。 >>602
スリープするのはUIスレッドじゃないのでそれはありませんよw
これ、ちょっと前にも書いたけど、Timerを使った方が可読的になる場合ももちろんあるし、
そうでない場合もある。
つまり、別に車輪を再発明してるんじゃありません。
質問者がどっちのケースかは分からない >>604
ああ、なるほど。
正直非同期メソッドって書きなれてないから目からうろこ 待つだけの処理で1スレッド消費しちゃうのは良くないな
かといって単純にAwaitを使っただけのコードだと、どこかでデッドロックが生まれる可能性が増えたり、待てずにメインスレッドが抜けてしまったりする危険が出てくる
ここはコルーチンしか無いでしょ!!コルーチン最高!!!! タスクスケジューラはC#自体の機能じゃないからな、漢は黙ってコルーチン!!! 私、待つわ〜何時までも待つわ〜
例え対象スレッドが落ちていても〜 >>583
kotlinはそっくりそのままと言えるものではなく
奇怪な何かになってる >>614
次はWindowsが落ちることを想定しよう C# → C++/MFC なら大して変わらないかも 言うほど難しくはない
同じものを作るために3倍程度の工数がかかるだけ 個人で使うものではない感じですか?
openglを扱うためには裂けては通れないようですが >>621
opengl c# でググったらいろいろヒットするが
DllImportがめんどくさいのはわかるが避けて通れない理由があるのか?
C++でやらなきゃって思うのならC++のスレへどうぞ >>621,623
> 個人で使うものではない感じですか?
個人で使うのになんら障害はない
> openglを扱うためには裂けては通れないようですが
OpenTKとかあるし別に必須じゃない
> ラッパーのほうが情報すくなくて難しそうなので
じゃあC++で学習すれば? このレベルでOpenCVに手を出して何ができるんだって感じもある
チュートリアルを通してやるのがせいぜいか >>617
テンプレートの深みにはまらなければC++のほうが素朴で簡単 この人3ヶ月前からこういう質問ばっかしてる
一体いつになったら手を動かすんだろう やっぱコルーチンだわ
コルーチン質問がいくらあっても全くロックが起きとらん!スレッドを丸々潰してもいない!最強!! >>620
そんなかからん。せいぜい 2割り増し程度。
でも、ブラックボックスが少なくて何やってるのか分かりやすいので、
はまりにくいかも。
C#のasync, awaitなんて初心者が理解できるものではない。 C#はクラスライブラリも簡単に逆アセンブルできるからブラックボックスは少ないよな WPF, Windows Form の二種類があったり、Xamarineを使うかどうかが
あったり、C#も複雑極まりないんだね。GDI がセンスがない関数群だったので
嫌われたこと、MFCが汚かったこと、Direct3Dが汚かったこと、COMが
汚かったこと、ActiveX がさらに訳分からなかったこと、の再来を感じる。
「非同期処理」もスレッドをいくつでも起こすタイプや、Poolみたいな
ことをやるタイプ、以外にいくつもあって、さらに最後に async, await
が Synax Suger になっているんだね。なんという複雑さ・・・。
また、スレッドを起こすのに 1MB もメモリが必要・・・・。
なんという無駄使い。 結局、.Net Standard が破棄されて、.Net Core だけが残るといううわさを聞いた
けど、やっぱり Xamarine が捨てられていくのかな。買収時点で最初から
予想されたことだけど。 >>634
> 「非同期処理」もスレッドをいくつでも起こすタイプや、Poolみたいな
> ことをやるタイプ、以外にいくつもあって
具体的には?
いくつもあるなら2,3挙げてみてよ 多分、
1. Thread
2. ThreadPool
3. Event-based
4. Async Programming Model
5. Reactive Extensions
6. Task-based
7. async/await
の 7種類だと思う。もっとあるかも知れないけど。 APM、EAP、TAPなんかを言ってるのかね? 単に時代の流れじゃないの
レガシーをタスクにする方法もあるし、.NETはネイティブスレッドではなかろう
開始元へ差し戻しが多いからawaitがあるだけで結局Task推奨になってると思うけど
議論が活発なのは結構だが、ぽこぽこ増えていく言語バージョンを見てると不安は抱く 時代の流れだねぇ。
今ならTaskとasync/awaitだけ覚えておけば事足りる。
Rxも場合によってはあれば便利だけど。 async/awaitの効率は最近は大幅に改善されつつあるよ
ただし.NET Coreに限る 効率以前に、訳分からん。
設計した人が実は能力が足りないんだって。 アメリカ人はなめ過ぎてる。
独占的地位を利用して。
こんなくそ設計しやがって。 (ワッチョイ 8261-VUEs)
この人、年中非同期処理が理解できないと繰り返し言ってんな
いい加減理解しろよw 良かったな
訳わからんものが他の言語にも波及したぞ
※非同期プログラミングの次回作にご期待ください C# は VB と似ており、C++ とは似ても似つかない。 >>642
17年の歴史があって、技術的トレンドを比較的積極的に取り込んできてる言語に
それを言うのは言いがかりというかお門違いだろうw >>647
そいつにとっては、ぼくの理解できないもの=設計が悪い、だからな。
自分がバカだとは認められないんだろう。 c#にはあってVBにはないものってないんだよな
.net CoreでもVB採用されてるし >>651
スパゲッティーなアルゴリズムを作ってしまっただけなのに気付いてない。
理解できないのではなく、馬鹿馬鹿しくて腹が立つだけ。
頭のいい人は、もっと良い方法がすぐにひらめくから。 C# のこの書き方は、35年前の Microsofot の N88-BASIC の
def fn にそっくり
[C#]
int f(int n) => n >= 1 ? n * f(n - 1) : 1;
[N88-BASIC]
DEF FN名前 [ ( 引数名 { , 引数名 } ) ] =式
10 DEF FNZEIKOMI(P)=P*1.08
20 INPUT "zeinuki kakaku";KAKAKU
30 PRINT "zeikomi kakaku";FNZEIKOMI(KAKAKU) ま、作ったアプリではなくソースコードを自慢するようになったらプログラマは引退したほうが良い キブハブとかいう謎の団体に監視されてるからソースのエレガントさにも気が抜けない時代 アメリカって、バイナリだと信用されないんだろうか。
アメリカは悪い人だらけなので武器を持たなきゃならないのが、それが安全な日本にまで波及していて、
セキュリティーソフトのせいでPCの能力は結構落ちるし、自作プログラムが誤検出されて
風評被害は出るしでいやな時代になったな。 アメリカじゃ、大手企業から以外はバイナリが信用できないから、
無料ソフトのバイナリが入手できない。それで日本まで生産性が下がって来た。
いつのまにか、そんな必要のない日本まで巻き添えになってる。
それに日本人は気づいてない。 >>665
持ってる技術に対して歩んできた人生がクソ過ぎてバランスが悪い >>659
ソースの綺麗さはプロダクトの品質、価値に大きな影響を与える
君はなにもわかってない >>669
ありますがどこの企業も社外秘でしょう
あなたの会社のコードを計測してみてください
話はそれからです >>670
そうですか?
じゃあ、有名なオープンソースとか参考にしてやってみますね >>670
ソースの綺麗さを計測する定量的な評価方法を示してくれ。話はそれからだ。 >>672
ググれ
コードメトリクスを測定する手段は無数にある ツリーを表示する部分はtreeviewですが、treeviewの中身を表示する領域はどのツールを使う運でしょうか
エクスプローラのメイン画面のことですね >>675
そんなものはない
何を表示したいかなんてアプリ次第だろ
要件に応じて自分で作るんだよ >>675
エクスプローラのメイン側はリストビューだよ 回答有り難うございます。
wpfテンプレートを使っているのですが、リストビューというツールは存在しないようですが、wpfにありましたか? textBoxコントロールでスクロールバーが表示されている状態で
スクロールバー上で右クリックするとスクロールバーのコンテキストメニューが出ますが
richTextBoxコントロールだと出ません。textBoxでは出る標準の右クリックメニューも同様に出ません。
どうすればrichTextBoxで標準コンテキストメニューとスクロールバーのコンテキストメニューを出せるでしょうか サーバサイドで使えるword操作用ライブラリってありますか?
ExcelにはPOIとかあるのですがwordは探しきれず Google Docsで作ってWordにエクスポートしたら listviewの使い方について、超初心者向けに解説してるサイトを教えてください
vs2017を使用しています
いろんなサイトやyoutubeで調べてたんですが、わからないです いつも思う
そんなクソみたいな動作しかしない
コントロールなんてやめて
いい感じに動作するもん自分で作ればいいのに WPFは最低でも標準でWinFormと同等のコントロール用意しておけよと >>688
いつも思う
初心者用スレで初心者向けではないアドバイスなんてやめて
適切なスレで持論を展開すればいいのに >>690
それがそーでもねーと思うんだよね
使いにくいコントロールを客に納品できるレベルに持っていくって
割りと無理ゲーじゃね? >>690
いつも思う
バカをスルーできる耐性がいつになったら身に付くのかと >>691
標準コントロールで実現困難なことをそれで無理に実現しようとしてるならそのアドバイスでいいだろうが、
今回の質問者は(今のところの情報では)標識コントロールで不足している訳ではなく、ありものを使うことすらやっとのレベルなのだから、自分で作れというのは無茶な要求だろう。 そうです、wpfです
これってwinformよりも良くないんでしょうか?
見た目が良くて新しいものというイメージなんですが http://var.blog.jp/archives/69202816.html
どのテンプレートを選べばいいんでしょうか
wpf使われているソフトはほぼないと書いてあります WPFは専用スレがあるよ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part22
https://mevius.5ch.net/test/read.cgi/tech/1513175747/ さくっと作りたいならWinForm
見た目にこだわって、今後も続けていきたいならWPF
まぁ今からやるならWPFだと思うよ。
DPIスケーリングとか今どきの地味でめんどくさい部分の対応はやってくれている。
WinFormはさくっと作れるけど、自分でUIの部品画像つくれないなら見た目は古臭くなるし、
UIとビジネスロジックの分離も大変。 C#がニッチだからな
プレイヤーはjavaと一桁違うんじゃね 5chのWPFスレとSwingスレを比較すればええのか? ええのんか? C#で書いていると、急にLinuxみたいなのが流行りだした場合、手間が増える
だろう。この業界は、今後どうなるか分からん。 >>704
そんなこと言ってたらどんな言語でもリスクあるだろwww >>699
速度も遅くて使い物にならないと効いたのですが、そんなこともないですか? >>707
それ以前に、WPFは未完成のまま既にメンテナンスモード入りしたから新規での利用はお勧めできない
MS自身がVSの開発に使うためだけにメンテされてるフレームワークだよ >>708
そうなんですね、c#の場合、選択肢はwindowsフォームアプリケーションしかない感じですか?
これはwin32といわれているものでしょうか? WPFの問題点は
(1) 学習コストが高い
(2) 即時モードの描画が使えない
だと思うので、これらを気にしなきゃ、相対的に新しいWPFの方がいいんだろうけどね。
レイアウトやバインディングの柔軟性が魅力的なのは否定できない。
これは意見が分かれるけど、
(3) イベントハンドラだらけになってコードが読みづらいWindows Formの問題点の
解消を目指したはずなのに、結局かえってWPFのコードの方が分かりづらい
これもWPFが好きになれない大きな理由 WPF敷居高いのは初めてづくしだからだろ。
データバインディングからレイアウトをxmlで書いて(デザイナーも使えるが)で、更にMVVMのお勉強。
だから、しんどい。 wpfでもmvvmとバインディング使わなくてもいけるけど、listviewの仮想化とか使えなくなったりするが、mvvmとかも強制見たいな風潮がwpfの敷居を上げてる androidは最初標準でデータバインディングとかなく途中で登場してMVVMっぽく作れるようになったが、
こういう風に段階を踏んで1個ずつ学び安い環境があったから良かった。
その違いだな。 Xamarin.Forms+UWPならついでにiOSやAndroidにまあまあ対応できたりする >>715
formでやってみます
もうc++のほうがいいですか? winformもlinuxで動くみたいなことも誰か言ってなかったっけ? WPFでしんどいのはMVVMという宗教。
自分で新しい宗派を名のる位のずうずうしさか他人の教義にひれ伏すか >>715-716
UWP のいい教科書/チュートリアルはありませんか? >>724
o https://github.com/Microsoft/Windows-universal-samples
o Windows Template Studioの吐いたひな形を眺める
o ストアにあるXAML Control Gallery >>728
Windows10使ってる人は全員使ってるやろ win form=win 32ということなんでしょうか
また、これは見た目はきれいにできないんですか? winformってデザイナー画面のズームできないんですか
な >>732
WinFormでファイラー作ると、XPのエクスプローラーもどき程度しか作れないのが問題だな
見た目のカスタマイズが困難だからね
ただWin32のコンポーネントを直に使うように作れば速度は本物と遜色ない物ができる
リストビューとか使わずにエクスプローラーの部品を引っ張ってくるなら >>734
見た目まで自由に作る場合はC++のほうがいいのでしょうか?
面倒そうではありますが
c++でもインターフェースは何らかのライブラリを使うと聞きますが >>735
C++でもWinFormsでも頑張れば見た目を変更できないこともない
ただ、素人が一人で片手間でやる作業量じゃすまないんだわな
簡単に見た目を変えたいのならWPFがお薦め >>736
それなりに使いこなせるように慣れば見た目を変えるのは容易ですか? スレチだけど、WPFはMahApps.Metroがあるからな。
メトロデザイン風なら楽できる >>730
画像ビューワとか?
ExcelとかWinFormで作られているじゃん >>741
>>742
そういうのはさ、Windows10に標準でインストールされてるやつだけど
自分で作ったUWPアプリなんか誰にも使われることはないよね
そもそもアプリストアなんか見ることは一切ないし >>743
ストア見てるよ
Ubuntuとかダウンロードしたもん ダウンロードをストアから行うことはあるが、ストアでアプリを探すことは一度もやったことないな 当初のUWPアプリなんて誰も使ってないという主張からどんどん特定条件が増えていくなw >>739
っMaterial Design In XAML Toolkit
マテリアルデザイン風もあるよ
MahApps.Metroとの連携も用意されてる 派遣先の組込上がりのPMがWinFormでタブレット対応アプリ作れと言ってくる
せめてWPFと言ったんだけどオナニーエンジニアうぜーと言われた >>750
勘違いするな
お前の仕事はモノを完成させることではなく労働力の提供なんだから黙って従えばよい
お前だって成果物責任を負う立場になれば多少なりとも保守的になるさ >>750
俺にもお前がオナニーエンジニアにしか見えないんだが。 >>750
変な言い掛かりつけてる奴は恐らくWPFだけが
今時のタッチ操作をサポートしていることも知らないだけだから相手にすることない 前も言ったけどさ、ガワはブラウザで作ればいいじゃん
WinFormもWPFもUWPもいらん
Windowsアプリだがブラウザで操作する
ASP.Net Coreでもできそうだが エレクトロンみたいな感じでいいんだよ
裏側はc#、表側はhtml, css, js
.Net CoreならMacでもLinuxでも動くし
これが一番いい ファイラを作成しているのですが、ツリービューでPC内のフォルダを検出する方法について、
どのあたりを調べたらいいか教えてください >>760
こういうレスすごい好き
どうしてエレクチオンしないんだろうな ソフト上でファイルにアクセスして、フォルダの中身などを表示したいのですが、まず何のフォームを使えばいいんでしょうか? ↑ありがとうございます
表示を切り替えたい場合などは、listviewなど別のものを使う感じですね 質問があやふやで回答が無茶苦茶なの続いているけど遊んでいるのか? ワッチョイ変わったけど同一人物っぽいね
ソフト完成するまでずっと質問してそう ある要素の中で2番目に高い数値を選ぶエレガントなlinqを教えて下さい Distinct().OrderBy().Skip(1)
とか?
全部同じ値の可能性があるなら知らん。 Distinct().OrderByDescending().ElementAt(1)
でしょ >>777
だいたい良いと思うが、データが2個以上無いと落ちるよね >>780
そんなもん例外キャッチすればいいでしょ >>782
ArgumentException系をcatchするのは悪手だと思う
.Distinct().OrderByDescending(x => x).Cast<int?>().ElementAtOrDefault(1)
とするのはどうだろう >>780
そういう状態を想定するならそもそも2番目が無い時の要件書いてないやつが悪い >>780
ちょっとしたQAにあらゆる異常系処理にまで対応したコードまで求めるのは違うと思う 二番目に高い要素を取得っちゅーてんのに二番目が無い場合に
例外じゃなく勝手に既定値を返す方がよほど悪手じゃね? >>787
強調し忘れてたから念の為書いておくと
Null許容型にしているから「二番目に高い要素が0」の場合と「二番目が無い場合」は区別できる
それを踏まえた上で指摘してくれているなら……Null許容型使ってたらnullチェックしてくれると信じてるんだがどうだろう >>789
正直そのへんは踏まえずケチつけたけど
結局エラー分岐が戻り値か例外かって話になるなら
質問者そっちのけでどちらがスマートか殴りっこしても不毛だなあ vs2017でただの波括弧で特定部分を囲うと、インデントされますが、これはどのような意味を持ちますか? >>793
if{}
みたいな条件がない
{}
だけの状態でもエラーとはなりませんが、何の意味があるのですか?
見た目を整えるだけですか? >>794
スコープを制限するからその中で宣言したローカル変数は外で使えない
たぶん、それ以外に違いはない c#のwinformのmenustripの背景というのは変更できないのでしょうか
この辺はそれぞれのPCに依存してるのかなーと思います >>800
BackgroundImageのプロパティに設定 c#でスクリーンショット撮影するソフトは不可能ですか? >>804
MessageBox.Show("PrintScreenボタンを押せろください"); Cでは数値型変数を複数の場所から参照するためには、変数のポインタ得てそれを使いますが
C#ではポインタ無いんで、数値フィールド持つクラスを作って
そのインスタンスから参照するしか無いんですか? 別にポインタはあるぞ。
行儀わるいから、使うべきかよくかんがえたほうがいいだけ。 >>808
スカラー型なら直接読み書きすれば良いのでは無いかと思いますが…配列なら参照型です
変数参照を扱うなら強化されたrefやoutを使えます、またunsafeだとポインタも使えます
TypedReferenceというのも有りますがコレを扱うための__makerefなどは些かアレなので…
.NETには値参照用のSystem.Runtime.CompilerServices.StrongBox<T>などジェネリック既存型も有ります >>808
Cでもスコープ内の変数は普通に読み書き可能。
スコープ外の変数でもその値を引数として関数に渡すことができる
ポインタが必用になるのは変数を書き換える汎用的な関数を書く場合だけ
C#の場合、同じことはrefやout付きの引数で実現できる >>813
> paintイベントハンドラってなんでしょうか
描画をするためのハンドラです
> paintというイベントは何によって発生するのかよくわかりません
描画をしたい時に発生します ↑描画とはどういう操作のことでしょうか?
フォームがロードされた時点で実行されます >>815
ゲームの場合は勝手に描画が実行され続けます using System;
public class Hello{
public static void Main(){
// Your code here!
private void myfunction(){
Console.WriteLine("jfoasd");
}
myfunction();
}
}
paizaでC#を入力するとエラーが出るのですが、どこがおかしいですか?
private voidの部分が予期されていないというエラーが出ますね
https://paiza.io/ja staticな関数から動的な関数を呼び出してるんじゃない? >>818
private voidの部分がおかしいですね >>818
まずこういう質問はpaizaの問題でC#のスレでやられても混乱するからVisualStudioでの話以外はやめてくれ
コード書けるサイトが間違っていないって保証が無い。実際動くコード転載してもエラーって何度も経験しているからな
VisualStudioで書くのならターゲットフレームワークを.Net4.7以上にしてprivate void myfunction()からprivate外してvoid myfunction()で動く たすけて!これ何が違うの?
どっちも普通に使えるよね?
ちな初心者
@List<T> list = new List<T>();
AList<T> list; >>823
1はlistという変数の定義と同時にList型のインスタンスで初期化している、普通に使える
2はlistという変数を定義しただけの状態
ローカル変数の場合は後で初期化する必要がある、未初期化のまま使おうとするとコンパイルエラー
クラスや構造体のフィールドの場合は暗黙でnullで初期化される、「普通に使う」ためには後でList型インスタンスを代入してやる必要がある >>823
> @List<T> list = new List<T>();
は
List<T> list;
list = new List<T>();
と同じ
> AList<T> list;
はlistの実体が設定されてないからそのままlist.Add(…)とかやると例外が発生する >>822
.NETのバージョンなにか関係あるか? >>823
C++と違ってクラスは強制的に参照型で変数宣言がポインタと同等なのよ
宣言だけではコンストラクタはもちろんインスタンスも割り当てられない >>822
paiza だと挙動が少し違うようです
このサイトはやめときます ちょっとコードを確認したいというときに、使えるツールありますか?
わざわざプロジェクト作るほどではないときですね
python のidleのようなものです >>830
notepad.exe + csc.exe >>825
>>826
>>828
NEWはしなきゃいけないのね
有難う御座います >>833
これいいっすね
初心者なのでしばらく練習します vs codeもちょっとしたコードの確認に使うものなんでしょうか? >>840
使うひともいれば使わないひともいますね 入力項目が沢山ある画面で、変更を保存せず画面を閉じようとしたときは警告を出したいです。
何も変更せず画面を閉じる場合は警告を出さずに閉じたいです。
この場合の変更チェックは入力項目に紐づく変数1個1個をチェックする以外に、スマートな方法は無いでしょうか?
入力項目に紐づく変数はデータクラスとして用意しているので、画面開く直前にハッシュのようなものを計算し退避しておき、
画面を閉じる直前にハッシュを再計算し比較すれば行けると思うのですが、オブジェクトのハッシュを求めるのは
GetHashCodeでいいのでしょうか? ないね
上に1dot
下に1dot
って動かされて終了したときは
出したくないんでしょ?
何か妥協点がない限り全部比較するしかないよ >>842
データクラスとして纏めてあるなら、GetProperties()やGetFilelds()で抽出した各変数を
ループで比較すればそこそこスマートなんじゃない。 俺ならデータクラスにINotifyPropertyChangedを実装するかな >>842
直接の回答でなくてごめん。
そういうMSにありがちなUIはたぶん
(1) 変更をキャンセル可能であること
(2) OKボタンをクリックした時点で初めて変更が反映されること
が要件になってるからそういう仕様になるんだと思うけど、こんな要件が必用ないなら
画面の入力項目の変更を変更があった時点でその都度対応するオブジェクトの
プロパティーに反映させてしまえば、「変更を保存せず画面を閉じようとしたときは警告を出」す
必用自体がなくなる
まあ一種の手抜きだけど、場合によっては許容される手抜きだと思う >>845
いいアイデアですね。
プロパティ1つ1つに
if(beforeValue!=afterValue)
OnPropertyChanged();
みたいな実装が必要なのが若干だるい気がしますが。
>>846
つまり変更した瞬間に即確定って意味でしょうか?
後出し情報で申し訳ないですが、最終保存先がDBで
アプリにとって比較的重要な情報の更新をしようとしています。
なるべく意図しない変更を防ぎたいです。 >>847
データクラスのベースクラスをPrism.MvvmのBindableBaseにするとまあまあタイプ量減らせたりするよ https://i.imgur.com/2rpwFqg.jpg
vs codeを使っているのですが、どこから実行できるんでしょうか?
言語はc#で、マイクロソフトのc#のアドオンを入れました
ctr shift pでrunというコマンド?が出てくるので、それをクリックしたのですが、outputには何も出ません
また、ヴィジュアルスタジオの場合はイベントハンドラーがありますが、常に実行させるようなイベントというのはただのC#にあるんでしょうか? >>849
ターミナルでdotnet runと打ち込んでEnterや >>842
そう言うの割とダルいから、データをクラスにまとめといて、開いた時点でシリアライズして文字列で持っちゃう。
保存時にシリアライズして文字列一致しなかったら、変更されてると言うことにする。
一個ずつ比較したら改修で漏れるよ。 >>851
ありがとうございます
そうやって実行するんですね
visual studioよりむずいです
ただ、Program.csという自動生成されたファイルが実行されます
同じフォルダに自分で作ったsample.csがあるんですが、こっちを実行させる設定はどこからするんでしょうか?
パスを指定してからdotnet runしてもエラーになるます >>853
いやだからチュートリアルくらいやれって >>852
それもいい考えですね。
メンバ変数に[DataMember]とアノテーションを
つければいいだけですね まあ一度変更があった時点で実際には等価でも別物と見なす実装が一番簡単だねたぶん。
実際そういうソフト結構あるよね。
そういう手抜きが気に入らないなら素直に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 vs codeのproblemの欄なんですが、間違ったコードを入力しても自動で更新されないようです
デバッグを実行しないとだめなようですが、リアルタイムにエラーを表示してくれる設定はできますか?
以前はできたんですが >>859
vs codeのことは専用スレで聞け、スレ違い
Visual Studio Code / VSCode Part5
https://mevius.5ch.net/test/read.cgi/tech/1541649564/ なぜmain関数の中に処理を書かないといけないのですか?
そういうルールだからってことですか?
pythonだとどこに書いてもいいと思うんですが 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
一回チュートリアルなり
入門書とか入門サイトなりやってみろと >>964
クラスがなんなのかわかっていないお前には無理
上にも同じ事書かれてるけどまず入門書を読め >>967
もしかして、ろくに経験もなく基礎も理解しないまま作りたいものを作り始めて、わからないときだけサイトで情報拾ってどうにかなると思ってないか?
ある程度基礎ができているか理解力のある奴ならそれでもいいが、君には無理だ。
ちゃんと金出して真っ当な入門書を買って、面倒がらずに順を追って基礎から身に付けてこい。 質問した人は回答にフィードバックくらいしろよ
質問スレでフィードバックせずに次の質問って論外 いいや
そいつのクソレスなどいらん
入門サイトやら入門書を1ページでも前へ進めろ そうだな。独習3版でも一回読み切る事をお勧めするよ >>964
ファイラー作るとか言ってた人だよね
コピペ以外で何か作ることはできたの?
作れずに諦めて次できそうなもの見つけて質問するの繰り返しでしょ 君の作ったプロジェクトの内容なんて分からんよ。
プロジェクト内のソースを探せばForm2クラスを宣言してるんじゃないの?
Visual Studioは色々自動生成して、色々隠蔽してるからオプジェクト指向が理解し難い。
一旦動いたら、全てのソースファイルをメモ帳で開いて動きを解析してみる。
全ては一度には理解できないから、オプジェクト指向の説明本を読む。
やっぱり理解できないけど、ソースを読み解くって繰り返すと段々理解できてくる。 WinXPのスタートメニューのように、ContextMenuStripのToolStripItemにDrag&Dropって出来ますか?
ToolStripItemのAllowDropをTrueにしても、ToolStripItemのDragEnterイベントが発生しないのですが。
VC++2008を使用しているのですが、ToolStripItemのプロパティ窓にはAllowDropもDrag関連のイベントも 表示されていないので、コードで記述しているのですが、もともとサポートしていない? >>975
試してないけどdocsには
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.toolstripmenuitem?view=netframework-4.7.2
DragDrop ユーザーが項目をドラッグし、マウス ボタンを離したとき (つまり、項目がドロップされたとき) に発生します。 (Inherited from ToolStripItem)
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.contextmenustrip?view=netframework-4.7.2
DragDrop ドラッグ アンド ドロップ操作が完了したときに発生します。 (Inherited from Control)
ってなっているからContextMenuStripのは期待通り動作しそうだけどToolStripItemのは項目自体のものだから単独では無理かと
どうしてもやるのならContextMenuStripのほう使ってMouseMoveか何かでカーソルと項目の位置確認しながらやるとか
その前にContextMenuStripがFocusの移動とかで閉じないようにClosingのイベントの設定なども当然必要
もう一回書くけど試してないし試す気もないので責任も取らないw 来月からASP.Net初めて触るんだけど
何から始めればいいの?
MVCとかそういう単語と理論とか?? >>977
ASP.NETにもいろいろあるんだけど…
とりあえずテンプレートをビルドして動かしてみるところから >>977
君が業務ドカタなら、たぶん君がやることになるのはASP.NET MVCでもASP.NET CoreでもなくClassic ASP.NET(WebForms)
Webの知識皆無でも最低限形だけでもWebアプリを作れるようにしたフレームワークで、
WinFormsでメモ帳モドキくらい作ったことがあれば楽勝だから何も心配いらない >>979
ASP.NET MVCなんじゃね?
知らんけど >>980
MVCの意味も知らない子が投入されるような現場でASP.NET MVCなんか使ってるかねえ
まあ物好きな前任者が一人で作ってたシステムだったりするとあるかもね >>981
前やった40画面くらいの小規模プロジェクトがMVCでしたわ
メンバーのほとんどがjs?css?c#?LINQ?な素人で激アツだった Webは覚えることが多すぎて禿げちゃうから
学習コストが低いらしいBlazorに期待してる asp.net core使って開発したいがまだまだ実用レベルではないんだろうな
そう思うと開発頓挫しそうで使えない 普通に使えるよ
英語読めないジャップにとっては永遠に実用にはならないだろうけど 〇〇Coreはバージョンアップで平気で互換性切ってくるから、受託開発では使っちゃいけない代物
ソースを手放さずいつでも自己責任で弄れる事業形態向け >>985
もう既に実運用してるけど
そろそろ3年だしさすがにね >>987
おじいちゃんはずっとCOBOL使ってればいいと思うよ >>989
こればっかりは老害とかそういう話じゃなくて業界構造の問題だからね
米国のシステム開発は内製が主流であり、基本的に自己責任だから改修のハードルが低いの
それに合わせてMSの開発者向けプロダクトも変化を許容する方向へ変わってきていて、
もはや日本のSIには全く適さないものになってしまってるんだよ OSSとか向こうから来るもんは全部そうだね
人身売買なんかやってたら理解できない文化ばっかり OSSに対する考え方は顕著な例だね
受託開発においてOSSのライセンスを受ける主体は開発会社じゃなくてユーザー会社だから、
当然、開発会社が使用したOSSは全てユーザー会社に把握させてユーザー会社自身が承認しなければならない
これは事業形態上完全に正当で必須なプロセスであり、時代遅れとかそういう問題ではない
NuGetやNPMなどのパッケージマネージャで依存関係として勝手に入ってくるOSS全てに対してこのプロセスを適用するのは事実上不可能 >>986
日本に住んでるなら日本語使えや、英語なんて翻訳すりゃあいいんだよ。フランス人を見習え インターネット創世記の頃は情報共有とか甘い言葉が飛び交ったが
最近ではやっぱスキルやノウハウといった知的財産情報は
対価を払って手に入れるべきだと思うようになった
ネットでただで手に入れたいなら英語くらい読めよって話だな このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 81日 22時間 3分 34秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。