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


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

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



1 名前:デフォルトの名無しさん [2009/01/20(火) 21:47:33 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

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

313 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:12:35 ]
&&や||の場合が両表評価するじゃなかったっけ?

314 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:16:14 ]
>>311
目的による
参照比較したいならObject.ReferenceEqualsが確実
値の比較がしたい場合は
==, IEquatable<T>.Equals, Object.Equals (左ほど優先)
の中から実装されているものを使えばいいと思う

315 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:17:00 ]
>>312
>>313
コード書いて確かめりゃ一発だろハゲ

316 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:19:29 ]
>>303
オライリーのやつ?

317 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:20:00 ]
>>315
めんどくさいんじゃチンカス

318 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:20:59 ]
質問です。
開いたウィンドウを閉じたいと思います。
アプリケーションの場合は、
Process hProcess = Process.Start("Notepad");

if (! hProcess.CloseMainWindow()) {hProcess.Kill();}

でできるのですが、エクスプローラの場合、
Process hProcess = Process.Start("explorer");
とすると、ハンドルされていない例外が発生し、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」となります。
どのようにしたらよいか教えてください。


319 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:22:05 ]
>>317
ならばヘルプ読め。あるいは他人の解答を信じるか。
|| msdn.microsoft.com/ja-jp/library/6373h346.aspx
&& msdn.microsoft.com/ja-jp/library/2a723cdk.aspx
> ただし、x が true の場合、y は評価されません。この場合、OR 演算の結果は y の値にかかわらず true になるためです。
> ただし、x が false の場合、y は評価されません。この場合、AND 演算の結果は y の値にかかわらず false になるためです。
> これは、"ショートサーキット" 評価と呼ばれます

320 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:25:30 ]
>>318
hProcessがnullなんじゃね?

Process.Startの戻り値は

>プロセス リソースに関連付けられた新しい Process コンポーネント。
>プロセス リソースが起動されなかった場合は null (既存のプロセスを再利用した場合など)。

シェル(explorer.exe)の場合、新しいフォルダを新規プロセスで開く設定にしてないと
プロセスは作られないよ

321 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:26:05 ]
だっふんだ!m(__)m



322 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:27:54 ]
2つ以上の評価をするときに使えそうだな

323 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:34:01 ]
>>316
これだけど、糞味噌に書かれててワラタ
ttp://www.amazon.co.jp/C-%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-%E3%82%B8%E3%82%A7%E3%83%BC%E3%83%A0%E3%82%BA%E3%83%BBW-%E3%82%AF%E3%83%BC%E3%83%91%E3%83%BC/dp/4822281698/ref=sr_1_1?ie=UTF8&qid=1233066091&sr=8-1
アレな感じのコメントもいくつかあるけどw

324 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:43:52 ]
>>323
たしかにレビューはあれだw
でも書名出してくれてありがとう

325 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:49:35 ]
>>320
おお。なるほど。explorerを新規プロセスで開く方法は?


326 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:53:26 ]
(´・ω・`)しらんがな

327 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 00:12:24 ]
>>244-250
レスサンクス。参考になった。

328 名前:デフォルトの名無しさん [2009/01/28(水) 05:02:41 ]
C#でのExcel操作(自動化)について質問をさせてください。
dataGridViewから入力した内容を取り出し、Excelに出力をしたいのですが
以下のコードの時、数値を入力した場合のみ、「数値が文字列として保存されています」と表示され、エラーが発生します。
どのようにすれば文字列ではなく数値で出力をする事ができるのでしょうか?

string[,] table = new string[10,1];
for (int c = 0; c < 10; c++)
{
table[c, 0] = dataGridView1.Rows[c].Cells[0].Value.ToString();

}
sheet.get_Range("A1", "A10").Value2 = table;

329 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 08:15:48 ]
object[,] tableにしてToString()しなきゃいいんじゃね?

330 名前:初心者 [2009/01/28(水) 14:28:58 ]
C#.NETについて質問させてください。
MVCアーキテクチャでWebサイトを構築していますが、XMLファイルより、
使用クラス名を読み取り、動的に使用クラスのインスタンスを生成する為に、リフレクション
機能を使用したいのですが、Type.GetType()メソッドやAssembly.GetType()メソッドなどの
戻り値がNULLになってしまいます。GetType()メソッドを使用するクラスと同じファイルに、
インスタンス生成したいクラスのクラス定義を書くとうまくいくのですが、別ファイルにすると、
うまくいきません。
詳しい方ご教授お願いします。

331 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 14:41:07 ]
完全限定名で書いてないとかそんなんだろ
初心者名乗る奴がリフレクションとかどうよと思うけど



332 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 15:31:31 ]
Dictionary<Key, Value>と同様な追加/削除/検索が行えて
ValuesプロパティがObservableCollectionみたいに変更通知機能がある
そんなコレクションってありませんか?

333 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 16:52:04 ]
Dictionary<,>とObservableCollection<>の両方をラップした
IDictionary<,>の実装クラスを作ればいいよ
ほとんど丸投げだからそんなに手間はかからない

334 名前:デフォルトの名無しさん [2009/01/28(水) 17:22:34 ]
パラメータをバインドする機構がない
ってどういう意味ですか?初心者にはさっぱり

335 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 17:31:18 ]
コンテクスト(文脈)って知ってる?

336 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 17:51:08 ]
文脈って意味じゃないでしょうか?!!!!

337 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 20:22:00 ]
そういえばインデクサやStreamのサイズ指定はint型だけど
64bit環境だとどうなるの?
アドレス空間が64bitになっても4GBに縛られるの?

338 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 20:37:22 ]
>>337
uintでないから2Gだな。
しかし、ストリームなら2GBずつRead/Writeすればいいし、
List<T>でもTが例えば16バイトの構造体なら全部で32GBまでいける。

もっとも、そんな大量のメモリを一度に扱おうというのなら、
まだまだネイティブなコードのほうがいいだろうと思うのは俺だけか?

339 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 20:43:20 ]
インデクサはどんな型でも使えるだろ。

340 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 21:49:42 ]
配列の添え字はlongでいけなかったっけ?

341 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 22:02:41 ]
NativeIntなんで64bitプロセスなら可能のはず



342 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 01:22:12 ]
>>340
配列の添え字にはlong型の値も使える。
そのため、配列にはint型のLengthプロパティに加えてlong型のLongLengthプロパティもある。
32bit環境でも一応、

int[] arr = new int[ long.MaxValue ];

と書けるし、コンパイルもできるのだが、>>341の言うとおり、NET.Framework内部では配列の
添え字をNativeIntで処理しているので、実行するとOverflowExceptionが発生する。
内部でNativeIntの範囲を超える添え字を扱えるようにしても、そんな配列を確保した時点で
メモリ不足に陥るのは自明なので、合理的な仕様なんじゃないだろうか。

343 名前:テラ初心者 [2009/01/29(木) 17:01:11 ]
引数・・・メソッドを呼び出す際に渡す情報のこと。
なんのことかサッパリわかりません。メソッドもなんかの処理なんだろうなあ位にしかわかってません。
何がなんのために何に何の情報を渡しているのですか????

344 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:04:07 ]
まず@ITのC#入門でも読め

345 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:05:56 ]
釣りでしょ

346 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:41:47 ]
TVのリモコンでチャンネルの上下は引数なしだが、一発選局はチャンネル数が引数といえる。

347 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:46:24 ]
tv.SelectChannel(-1, CURRENT) とか書きうるわけだが

348 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:51:56 ]
せっかくメソッドにしてるのだから Up() Down() だろ。
なんで使いにくくするんだ。

349 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:52:47 ]
リモコンのボタンで、CURRENT、-1、チャンネルチェンジと押すわけですね、その形式だと。

350 名前:デフォルトの名無しさん [2009/01/29(木) 17:55:29 ]
ほむほむ。ありがとう。Voidとかで引数を返さないっていうのはどういうメリットがあるというか、どういうときに使うのでしょう?
チャンネルでいうと、8ちゃんボタン押しても数字が入っていないので何も起こらないのかな。

351 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 17:57:23 ]
voidで値を返さないメリットがあるかじゃなくて
値を返すメリットがないからvoidなんだろ



352 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:04:06 ]
それ引数じゃなくて戻り値では

353 名前:デフォルトの名無しさん [2009/01/29(木) 18:10:46 ]
private void CalcButton_click(object sender,EventArgs e)
{
}
作って覚えるC#の本より引用なのですが、これからVoid取っちゃうと何か不具合ありますかね?

354 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:11:34 ]
やってみればわかる

355 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:11:51 ]
イベントから学習しろ

356 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:12:01 ]
>>353
戻り値が分からなくてエラー出る

357 名前:デフォルトの名無しさん [2009/01/29(木) 18:15:19 ]
なるなる。ありがとう。やっぱり読むだけじゃ覚えれなそうですね
6年前のPCにVisualStudio入れたら重くなって挫折してしまいました

358 名前:デフォルトの名無しさん [2009/01/29(木) 18:17:08 ]
デフォルトのvoidさんは無いのか。
2CHよりひでーな。

359 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:18:33 ]
>>357
csc.exeのあるディレクトリにPATHだけ通せば
あとはコマンドプロンプト+エディタで最低限の環境が揃うぞ
ネットで適当に調べてやってみるといい

360 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 21:40:32 ]
頻繁に呼ばれる関数で
newを使うのって速度かなり落ちますか?
画像データ用の領域で、一度に640*480*4バイト確保します。

361 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 21:42:02 ]
関数を呼ぶのに new は必要ない。



362 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 21:44:47 ]
>>361
日本語読めますか?

363 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 21:45:07 ]
落ちますか? ってやってみればいいじゃない

newを使うかどうかよりも1MBを頻繁に確保するのは重いかもね
ワーキングセットも大きくなるだろうし

364 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 21:48:19 ]
コンピュータの性能が良すぎて問題ないという可能性もある。
まずは率直な書き方で作ればいい。

365 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 21:49:23 ]
キャッシュしても問題ない構造ならとりあえずキャッシュするようにしといてもいいとおもうよ
手間かかるものでもなし

366 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:03:05 ]
>>362
日本語で書いてどうする?

367 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:18:14 ]
>>366
日本語通じてなくてワロタ

368 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 08:50:41 ]
>>366
アイちゃん乙

369 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 08:52:34 ]
安価ミス
>>361

370 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 10:57:19 ]
ArrayListやList<T>において、
list.Add(new T())
といった感じで配列に追加している場合、
削除系メソッド(Clear、Remove、RemoveAllなど)実行したときに配列内のクラスのインスタンスは
開放されないのでしょうか?


371 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 11:01:05 ]
その要素を他が参照してなかったらGC対象になる



372 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 11:09:48 ]
>>371
そういうことなのですね。ありがとうございました。

373 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 15:09:36 ]
"バイト"や"キログラム"のような単位を表す文字列を
設定されたカルチャに応じて取得できるクラスないですか?

374 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 15:22:26 ]
標準ライブラリには無い
複数形とか考えると多分作るのは不可能に近い

375 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 18:15:54 ]
不可能ってこたねえだろ

376 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 18:46:52 ]
>>375
渦中って読めますか?

377 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 18:51:34 ]
俺もそんなクラスほしい
標準であってもいいよね

関係ないけど「OK」「キャンセル」「適用」 とかも欲しかった

378 名前:デフォルトの名無しさん [2009/01/30(金) 19:14:29 ]
ってか、C#おもろいけど、GUI案件がないからモチベあがんないんだよね。言語的にはいいんだけど。

しょうがないから、ASP.NETもじもじやってる。

379 名前:デフォルトの名無しさん [2009/01/30(金) 19:47:32 ]
C#とついでにSilverLigitもやったんだけど、案件が全然ねえ(;´д`)俺は馬鹿だったのか?

380 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 19:54:31 ]
わざわざ.netを指定してくる企業って皆無では・・・

381 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 20:20:23 ]
おれずっとc#でやってたよ。MSとちょっと関係ある会社だけど



382 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 20:21:56 ]
VS2008 + .net2.0

dirフォルダ内のサブフォルダの中身も含めたファイルの個数を出したいです。

using System.IO;
string[] files = Directory.GetFiles( dir, "*", SearchOption.AllDirectories);
として、files.Length を数えてるんだけど、ファイル数が5000とかあるフォルダを
検索しなくちゃならないので、さすがに遅いです。

この段階ではファイル名のstringは使わないので、個数だけで良いのですが、
サクっと出せるような方法ありませんか?

383 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 20:48:30 ]
ないよ
遅いのは結局IOであってファイル名とかはほぼ関係ない

384 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 20:49:49 ]
>>383
了解しました。
我慢します。

385 名前:デフォルトの名無しさん [2009/01/30(金) 21:01:30 ]
Rectangle rect;
rect = null;

としたところ、Rectangle 型なのでnullは入れられないと言われました!
VB.NETだと、どんな型の変数にも Nothing を入れられるのでつい同じかと
思っていました。どうやったら同等の処置が可能でしょうか、よろしくお願いします。



386 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:04:19 ]
VBでも本当にNothingを入れることはできないよ
Rectangle? rect;
rect = null;
※使うときはRectangleにキャストすること

387 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:05:31 ]
>>385
Rectangleは値型だっけか。これでどうだ。
Rectangle? rect = null;


388 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:13:03 ]
>>385
VB の Nothing は null じゃなくて Zero Fill な値(既定値)だからな
C# 的には null と既定値は区別される。C# 的には VB の Nothing
は default(T)。

なので VB の Nothing 代入に近いのは
var rect = default(Rectangle);
だぁね

389 名前:デフォルトの名無しさん [2009/01/30(金) 21:15:16 ]
>>386-387
どうもです。やってみましたところ、キャストを入れた上で一応解決かと思った
のですが、一つだけ問題がでました。Contains()メソッドを使っているところで
'System.Nullable<System.Drawing.Rectangle>' に 'Contains' の定義がありません
というエラーとなりました。これは

if ((Rectangle)rect.Contains(e.Location))
{・・・}

のように使ってみたのですが、他の書き方しないとだめでしょうか。


390 名前:デフォルトの名無しさん [2009/01/30(金) 21:18:27 ]
>>388
ご教示どうもです、知りませんでした。

>なので VB の Nothing 代入に近いのは
>var rect = default(Rectangle);

こういうのもあるんですか!この場合は
if (rectG != null){・・・} 
のように使えるでしょうか。そうだ、やってみます。

391 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:19:56 ]
((Rectangle)rect).Contains
>>390
できません
rectG!=default(Rectangle)ならできるけど(0, 0, 0, 0)とは区別できないよ



392 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:23:29 ]
defaultはgenericで使うことを前提に作られているんで若干癖がある。
Rect(0,0,0,0)に初期化することが目的なら
var rect = new Rectangle();
未初期化のRectangleが欲しいのなら
Rectangle rect;
でいい。

393 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:24:41 ]
>>390
おおっと。
いや VB 使っているうちは VB の流儀でいっていいと思うんだが
C# に来たんだから C# の流儀にあわせて区別しような。
Rectangle? val = null;
のほうを使えってことだけど。

>>389 のほうは rect.Value.Contains(e.Location) な。
null だったら例外出るが。例外がいやなら

if( rect.HasValue && rect.Value.Contains(e.Location) )

かね。


394 名前:デフォルトの名無しさん [2009/01/30(金) 21:24:56 ]
>>391
>((Rectangle)rect).Contains
早速ありがとうございます、これで大丈夫でした、助かりました。
>rectG!=default(Rectangle)ならできる
わかりました。いろいろご教示ありがとうございました!

皆様本当にありがとうございました!またよろしくお願いします!!

395 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:26:18 ]
うぽ!
(rect ?? new Rectangle()).Value.Contains(


396 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:26:39 ]
っていうかVBでも値型をNothingと比較するのはダメだろ
ゼロ初期化されたものと同じとわかっててやるならいいけど,>>394はわかってなさそう

397 名前:デフォルトの名無しさん [2009/01/30(金) 21:31:15 ]
>>392
>>393
>>395
C#の凄い表現のバリエーションにびっくりです、またこれから勉強致します。

>>396
わかってなかったです。すみません・・・。

ではまた。

398 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:33:38 ]
Rectangleをnullと初期化したあとにどう使うんだろう・・・

399 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:40:02 ]
フラグ代わりだよ
Rectangle rect;
bool isRectAssigned;
みたいなのってよく出てくるだろ
これを一つにまとめたのがnullable

400 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:43:05 ]
IList<T> list = new List<T>();
とかやってたら、IListの方にはForEach()がなくて涙目なんだけど、そういうもんなの?

401 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:55:52 ]
ForEachぐらい自分で書けばって



402 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:07:07 ]
nullable ってキモいからまだ使ったことがないな
すこし慣れてみるか……

403 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:09:46 ]
拡張メソッドで自作するのは簡単
でもEnumerable.ForEachが無いことを考えると,素直にforeach書けということなんだろうと思う

404 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:26:01 ]
WPFではShowDialogの戻り値がbool?になってたりするね

405 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:48:24 ]
正確に20msで処理をしてFORMのPictureBoxを触りたいときは、
BackgroundWorker+System.Timers+AutoResetEventでいいですか?
他にもっといいやり方があるんなら教えて欲しいのですが…orz

406 名前:デフォルトの名無しさん [2009/01/30(金) 22:57:49 ]
>>405
> 正確に20ms
まずこれが難しい。timeBeginPeriod か MMCSS 使えば
ある程度いけるかもしれないけど、あくまである程度。
さらにいいやり方となると Forms 使うのが間違ってる。


407 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:58:20 ]
20msは厳しいんじゃないの
更新間隔は20msよりも長くして,
そのつど経過時間を計測してそれから計算してその結果をもとにしてPictureBoxを更新したほうが

408 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:06:23 ]
コールバック間隔は,Application.Idleイベント使うなり自分でメッセージループ回すなりして
その中でStopwatch使って時間計測すればある程度正確にできるけど
フォームの更新が20msでは絶対無理

409 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:27:55 ]
20msってどこから来たの?
測定機械のタイミングとか?
GUIの更新は後回しにした方がいいんじゃね?

410 名前:デフォルトの名無しさん [2009/01/31(土) 00:53:40 ]
20msってWindowsのインターバルタイマーで拾えるの?
割り込み上がっても、処理が間にあわん気がするんだけどね
リアルタイムOSでというのなら分からんでもないけど。
#組み込み用が対象なのかな?
割り込み->データをFIFOQueueに追加->queueのデータをGUI処理
になるんだろうけど(sharedメモリ経由か)
#割り込みコンテキストってWinにはあるのかな?

411 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 02:40:33 ]
いつも思うんだが、なんか2chって日本語として成立してない質問でも適当にESPを働かせて、
(というより、回答する側も他人の文章を正確に読解する能力がないだけ、という方が
より真相に近いと思うんだが)回答する奴が多すぎないかね。

>>405
「正確に20msで処理をして」とはどういう意味?
正確に20ms間隔でイベント処理をしたい、って意味なの?
いずれにしても、「正確」という表現はもっと定量的な表現にする必要があるだろ?

仮に20ms間隔でGUIを更新したい、って意味だとしたら、
今時のPCなら単純にSystem.Timers.Timer使っても±5ms以内の誤差で可能だと思うけど。

少なくとも、平均速度として50回/秒が実現できればいいということなら
(意味があるかどうかは別として)ほぼ確実に出来ると思う。

もちろん糞重い描画処理をしてたらあっという間に破綻するけど。

いざとなったらスレッドでThread.Sleep(0)と、Stopwatchをポーリングして
20msごとにControl.BeginInvoke()を実行する無限ループで実装したっていいし。



412 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 04:51:35 ]
えらい自信だからためしに作ってみたけど
System.Timers.Timerなんて無茶苦茶ばらつくじゃないか


413 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 09:07:32 ]
エスパーで解釈すると、
20msecでコントロールのアップデートはありえないから、
CreateGraphics()で得たGraphicsで直接描こうとしている。
CreateGraphics() + GDI+メソッドは別スレッドからでも使える。
こういう用途にはFormかPanelが適当なのだけどVB6以来の伝統かPictureBoxを使いたがる人が多い。
Timers.Timerはタイマーイベントの処理時間分、間隔がずれてゆくはずだからその分の解消をしたい。
そんなとこだろ。






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

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

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