ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
!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 ちなみに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をオンメモリで解凍、ストリーム取得できるライブラリは無いですか? ■ このスレッドは過去ログ倉庫に格納されています