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


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

C#, C♯, C#相談室 Part52



1 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:15:52 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part51
pc12.2ch.net/test/read.cgi/tech/1233757615/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

23 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:03:01 ]
public List<int[][]> List_POS;
List_POS[a] = new List<int[][]>(col_count/2);

こんなんコンパイル通らないでしょ
List_POSに入るのがList<int[][]>
List_POS[a]に入るのはint[][]
List_POS[a][b]に入るのはint[]だよ

24 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:21:31 ]
0xEDB88320 ^ 0
の演算結果が
0xEDB88320
となるのはなぜ?
VB.NETだと1になるんだけど

25 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:32:47 ]
なぜも何も普通だろ。
VBのほうが謎だ。

26 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:38:14 ]
>>24-25
VBの^は冪乗、C#の^はビット毎の排他的論理和。

27 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:02:40 ]
>>26
そうでしたか、ありがとう。

28 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:15:19 ]
>>23 なるほど
rcm.List_POS.Add(new int[col_count / 2][]);
rcm.List_POS[a][b]=new int[2];
こういう風に修正したら通りました
二行目もできるかどうか試してみます。

29 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:56:34 ]
>>28
あんたさ、もっと読みやすさを心がけてかいてよ
せっかくオブジェクト指向言語使ってんだからさ
このプログラムを保守するはめになったやつのことも考えようぜ

30 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:35:07 ]
3次元配列ってところがダメだよな。
図形クラス作るのが普通じゃね?

31 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:36:19 ]
コードの読み易い、読み難いってのは
オブジェクト指向関係ないと思うよ
OO厨なら仕方ないが



32 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:10:16 ]
同意

33 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:19:04 ]
なんで関係ないのかと
オブジェクト指向のパッケージ化だけ考えても
データと振る舞いを結び付け、可読性を向上してるだろ
納得できる理由を書いてみろ

34 名前:デフォルトの名無しさん [2009/04/05(日) 13:26:25 ]
・継承によるコードの隠蔽,初期化の順番の制約がわけわからんになりやすい
・再利用を謳っているために,同じ"ような"コードがあるか探さないといけない.
 それを怠ると車輪の再発明の連続
・目的のために様々な手段が用意されすぎている
>>33みたいな奴がOOPLすごいよ!クラスで設計図が継承で再利用!しかも大規模開発に剥いているよ!
 って幻想を吹き込んでくる

35 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:28:03 ]
>>33
OOはパラダイムなので「可読性の向上」まではどう考えても含んでいない
なのに>>33が可読性の向上とか言い出している辺りが幻想,ね

36 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:45:57 ]
OO=可読性の向上ではないが、>>21のコードが見難く、保守のし難いコードであるのは事実。

37 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:55:47 ]
複数台マシンがあって、使用メモリが少ない方で処理を行うようにしたいのですが、
他のマシンの利用可能メモリなどを取得したいのですが、
どのようにしてとればいいのか、教えてくだされ(;´д⊂)

Processなら、 Process.GetProcessesとかでとれるんですが。。。

38 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:02:07 ]
>>37
なんかずいぶん無茶なこと言ってるぞ。
アプリケーションが自前でロードバランスするのか。
もちろん実験ならいいんだけど、背景は何?

39 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:11:08 ]
>>37
何がやりたいのかさっぱりわからんけど
各々のマシンで動かすアプリがそれぞれのメモリ残量を返すようにすればいいんじゃねーの?

40 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:18:47 ]
まずはOOじゃなくて構造化プログラミングをば

41 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:09:50 ]
その前に2chを卒業



42 名前:37 mailto:sage [2009/04/05(日) 18:13:52 ]
>>38,39

ええっと、説明不足でした^^;

分散処理をしたくて、
本マシンから、重い処理だけを社内LANネットワークにつながった他のマシンで処理させる感じです。

で、その他のマシンっていうのが複数台あり、パフォーマンスに余裕があるものを選択するというものでした。
LANにつながった他のマシンの現在のメモリ使用量などを調べる方法があったら欲しいとおもったのです。

さすがにむりなのかな?^^;

43 名前:デフォルトの名無しさん [2009/04/05(日) 18:15:35 ]
>40

構造化で思い出したんです。↓

plaza.rakuten.co.jp/u008expert/

そう言えば二次元のGenericリストとか、
var gl0 = new List<List<int>>();

その他、色々と複雑なデータ構造を簡単に作れます。↓

var gl1 = new List<Dictionary<string,int>>();
var gl2 = new Dictionary<string, List<string>>();
var gl3 = new SortedDictionary<string,
SortedDictionary<string, List<int>>>();

なんで本とかで、あまり紹介されないのでしょうかねぇ。
(・・?

メモリを無茶苦茶食うとか…
スピードがえらく遅いとか…

C#を使う人はLispのような入れ子構造が嫌いとかぁ?^m^

何がネックになっているのでしょうか
ご存知の方は教えて下さい。m(__)m

44 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:18:37 ]
宣伝乙

45 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:22:07 ]
誰でも知ってるから。

46 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:33:31 ]
そんな取り回しの悪い複雑なものを作って喜んでるのは初心者くらいなもの
誇らしげに言うようなことじゃない

47 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:36:35 ]
これはどう見ても釣り
ttp://plaza.rakuten.co.jp/u008expert/
こいつに悪意をもつものの仕業に違いない

48 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 19:54:37 ]
何処に書けばいいのか分からんかったんだけど、
DirectoryEntry使ってiPlanetのディレクトリ更新しようとしていて
ユーザーとかのプロパティを見る参照は上手くいくんだが
プロパティ変更してCommitChanges呼ぶとエラーになる。

ADだと上手くいくんだけど、iPlanetが特殊なんかな。それとも
DirectoryEntryがPureなLDAP話さないでAD固有な話し方してるからかな。

49 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:11:48 ]
>>43
当たり前のことすぎて触れることじゃない。

50 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:13:09 ]
>>42
#1 > LANにつながった他のマシンの現在のメモリ使用量などを調べる方法
#2 WANにつながった他のマシンの現在のメモリ使用量などを調べる方法
#3 近所につながった他のマシンの現在のメモリ使用量などを調べる方法
そんな複雑なケースに対応するようにAPIが提供されているわけではありません

というわけで,マシンの現在のメモリ使用量(?????どんなの想像してる?シングルプロセス,シングルコアなマシンでの使用量?)を取得する
のと,TCP/IPかなんか使って通信するものを組み合わせればいいんでねーの?

51 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:13:55 ]
Dictionary<string,int>をラップして分かりやすいクラスにして
さらにList<MyClass>にした方がいいことが多いから
List<Dictionary<string,int>>は使われない



52 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:14:17 ]
>>43
むしろ"abc"[0]とか,トリッキーなコードになってしまうような気がする

53 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:33:08 ]
>>50
各PCでそういうサービスを立ち上げておけばOKだね

54 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 20:55:29 ]
というわけでWMIでリモートのPC参照すれば可能かも
d.hatena.ne.jp/seki-moto/20081014/wmi2

55 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 08:03:03 ]
C#の本の質問もここでいいのかな?

ある程度C#についてオブジェクト指向とか綺麗なコードの書き方含めて載ってる本ないですか?
独習C#か、プログラミングC#がそれっぽい雰囲気出てたんだけど……。
洋書でも可です。

56 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 08:33:42 ]
>>55
アマゾンカテゴリランキングの1〜100位探してみろよ

57 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 09:18:36 ]
身も蓋もないなw
まああっちはレビューも書いてあるしなあ。

58 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 09:56:42 ]
>>56-57
サンクス。
C#クイックブックもよさげかな……。
今度本屋で見て見よう。

59 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 10:05:29 ]
レビューはあんまあてにならないだろw

60 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 10:36:11 ]
ここでの評価もあてにならんからどっこいどっこいだ
うまく本の当り掴めるようになりたいもんだ・・・技術書安くないもんなあ

61 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 10:37:29 ]
図書館おいしいです



62 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 12:17:17 ]
洋書でいいなら、googleやSafariで立ち読みすればいい。

63 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 12:36:24 ]
もちろん、座って読んでもOKだ

64 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:34:28 ]
だがうんこ座りはご遠慮いただきたく。

65 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 15:26:55 ]
例えばLabelを継承した独自のカスタムコントロールで
継承元のTextAlignとかを使う側に見せないようにするとかは簡単に出来ますか?

Internalとかで上書きしてやればできそうだけど、なんかスマートでない気がするし・・・
継承という以上仕方がないとは思っていますが


66 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 15:38:44 ]
なんで機能を継承してるのに隠蔽する必要があるの?
っていう話に落ち着くぜ

67 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 16:08:04 ]
そういう場合って継承するんじゃなくインスタンスをプライベートに持って
アクセサを作るのが普通なんじゃない?
#言語仕様とは別のデザパタのdelegationって奴になるのか?

継承してるのに使えないとかはOOの性質上無理だと思うけど。


68 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 16:11:45 ]
>>66
>>67
ですよね
今作られている既存のカスタムコントロールがそう作られていて大きく変えないようにするにはどうかなと考えていたんですが・・
おとなしく新しく作り直してそっちに変更するように要望をかけるとします。

69 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:12:19 ]
TextAlignは見えるけど,機能上使えない,っていう特殊化ならアリ

70 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:34:53 ]
継承はis aの関係が基本で、決してカスタマイズ/再利用じゃないからね。
継承元で出来る事が継承先で出来なくなるのは有り得ない。

71 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:35:33 ]
既存のコントロールを内包してるけど、
別物として扱いたいってことか。
セットされた値を何かしらの方法で計算して表示するコントロールでほとんどラベルなんだけど、
表示されてるテキストは直接書き換えはさせたくないみたいな。




72 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:39:20 ]
ググったら似たような質問あったよ
件名:[C#]コントロールのプロパティ固定(継承)
www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42032&forum=7
セッターを空のメソッドでオーバーライドして殺してるみたい。

質問の内容自体に対する評価はここと似たようなもんだな。

73 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:43:11 ]
youtubeとかニコニコの動画のダウンロードってどうやるの?

74 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:54:04 ]
一度言ってみたかった・・・
「ググれカス」

75 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:16:56 ]
>>55
洋書でいいなら、中国語でいい本がある

76 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:18:01 ]
グぐってきました・・・で、動画のurlの特定ってどうやるんですか?

77 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:23:40 ]
>>76
  。     。
    。  。 。 。 ゚
   。  。゚。゜。 ゚。 。
  /  // / /
 ( Д ) Д)Д))

78 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:29:53 ]
C#に特定した話じゃないなあそれ

79 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:35:29 ]
・・・もういいです・・・使えない人たちですね

80 名前:73 mailto:sage [2009/04/06(月) 18:39:47 ]
>79
これ誰だよw

C#じゃないみたいなんで、他所のスレ探します

81 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:43:39 ]
取り敢えず公式見てこいよ。
「正当な」方法でどうやって情報取得するかきっちり書いてあるんだから。



82 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:44:58 ]
公式はどこにあるのですか?
教えて下さい

83 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:48:53 ]
そりゃニコニコやyoutubeのトップから辿れよ

84 名前:73 mailto:sage [2009/04/06(月) 18:53:18 ]
>>81
ありがとう調べてみます

>>82
だから誰だよww

85 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:58:28 ]
>>75
中国無理っす

86 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:00:20 ]
>>80,84
いい加減にしてください・・・誰なんですか・・・

87 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:07:16 ]
これが無職いたのよいところ

88 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:16:56 ]
ここまで全部俺の(ry

89 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:22:05 ]
もう私のために争うのはやめて!

90 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:29:15 ]
WebBrowser Controlでの質問です

ttp://domworld.cool.ne.jp/mst/index.cgi?mode=mstinit
↑のページを完全に読み込みたいんですが、javascript?のところで途中で止まってしまいます

MessageBox.Show( webBrowser.Document.GetElementsByTagName( "html" )[0].OuterHtml );
でHTMLを表示してもソースと違っていてどうにもなりません
対処法があれば教えてください

あとソースとwebBrowserのhtmlが違う理由をわかる方いたら併せてお願いします

91 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:07:24 ]
違っていてってどう違ってるのかぐらい教えてくれよ。
User-Agentあたり見て出力内容わけてたりしてな。



92 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:13:43 ]
>>90
ううむ。折れんところで試してみたが、一応完全に?読めたけど。

93 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:15:57 ]
>>90
> ソースとwebBrowserのhtmlが違う理由
ブラウザがパースしたDOMをテキスト表現にしているからだとおも

94 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:54:33 ]
>>91-93さん
レスありがとうございます

WebBrowser.Document.All.GetElementsByName("id")[0].SetAttribute( "Value", "name" );
のように入力してログインまで持って行きたいんですが

>>92
正確ではありませんでした
すみません

DOM解析済みのHTMLでFrameを取りに行ってるみたいなんで無理みたいですorz

WebBrowserコントロールからフレームを利用したのページのHTMLソース取得方法
ttp://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/41e23caf-05d6-4dff-b5a1-9b1ecb12b4ed/

95 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:15:40 ]
>>94
がんばればできる。

96 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:17:00 ]
現在大体100μs単位で動くタイマーを作成しているのですが、別スレッドからControl.BeginInvokeでコントロールを
操作する際に、そこでApplication.DoEvensを実行すると、コントロールが壊れる?みたいなのですが、なぜでしょうか?

具体的にいうと、別スレッドでビジーループを回して待機していたタイマーからイベントが飛び、Control.BeginInvokeで
メインスレッドにて登録されたデリゲートを実行するようになっており、デリゲート内にApplication.DoEventsがあると、
別ウインドウで操作していたHScrollBarが壊れ、Dock.FillしていたはずのコントロールがHScrollBar部分をドラッグ
することによりリサイズできてしまう、という具合です。

サンプルプロジェクト:
ttp://www1.axfc.net/uploader/He/so/214358
pass: invoke

サンプルプロジェクトのProcessingWindowのStartボタンをクリックした後、ControlWindowのスクロールバー右を
連打するとスクロールバーが壊れます。

一応メインスレッド上でタイマーのビジーループを回すか、Application.DoEventsを取り除くことにより回避できますが、
前者だと何もしてなくてもCPUを食ってしまうし、後者だと重い処理を行っているときにUIの更新ができなくなってしまう
のでできれば別スレッドからBeginInvokeしたときにApplication.DoEventsを実行したいのですが…

97 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 16:04:51 ]
とりあえず俺の環境では起きないんだが

98 名前:96 mailto:sage [2009/04/08(水) 17:32:32 ]
>>97
こちらでは、スクロールバーの右の矢印部分を連打(結構なスピードで)すると簡単に発生するのですが…
スクロールバーの描画が破綻した後、右矢印部分になぜか点々(サイズ変更可能なウインドウに表示されてたり
するアレ)が表示されます。
こうなると、スクロールバーは完全に機能しなくなり、スクロールバーのあった部分は再描画が無効になります。

99 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:07:52 ]
>>98
俺も結構な速度でやってみたんだけどな
それこそクリックしたら画面の女の子脱ぎますよと言われたくらいの速度でw
ほぼ同じ環境の後輩に同じことやらしてみたけど症状が出てない


一応環境
VISTA BUSINESS SP1(エアロ有効)
VS2008 Professional上でデバッグ実行



100 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:23:43 ]
>>97のPCで問題を再現するには超人的なスピードでの連打が必要なんだよ、きっと。

>>98
こういうケースでは、スリープを追加するなどして
"連打" ではなく、一回のクリックで問題を再現させることを目指すと、原因がわかったりするよ。

例えば、DoEvents()の後にThread.Sleep(100);と書き、スクロールバーを右クリックしてみるといい。
運良くこっちと似た環境ならば、100%の確率でスタックオーバーフローするので
スタックトレースを見れば原因がわかるはず。

101 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:25:08 ]
>>98
ディスプレイドライバのせいだったりして
ハードウェアアクセラレータ無効にすると治るとかない?



102 名前:96 mailto:sage [2009/04/08(水) 18:44:52 ]
>>99
こちらでは速めのダブルクリック程度の速度でも発生するのですが…
こちらの環境は
Geforce 9600GT 512MB
XP 32bit
VS2008 Pro
です。

>>100
スタックオーバーフローするのは、BeginInvoke内でdoEventがtrueになる前に何度もBegineInvokeが
実行されてしまうのが原因でした。これについては、Invokeの前にdoEventをtrueにすることにより解決できましたが、
スクロールバーが壊れるのとは別問題のようです。

>>101
ハードウェアアクセラレータは切ってみましたが、特に関係があるわけではないようです。
ドライバも最新のものにしてみましたが、改善しませんでした。

103 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 20:38:21 ]
ほんとだうちの環境でも壊れたぞ。

104 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:12:13 ]
>>102
うーん。自分の環境だと再現しないので勘になっちゃうけど。

DoEvents でもたぶん BeginInvoke なキューを処理する気がするから
このコードだと一度間に合わなくなればそれより優先度の低いメッセージは
まったく処理されなくなる希ガス

あとそもそも精度 100μs なんて無理って話は突っ込んでおいたほうが
いいのかな

105 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:35:32 ]
>>96
環境によって差が出てるということは、
Control.BeginInvokeの発行間隔が処理時間より短いせいだと思う。
前の処理が終わらないうちに次のBeginInvokeが実行されないようにするか、
同期型のControl.Invokeにする。
あとはDoEventではなくpictureBox1.Updateを使うべきだろう。


106 名前:96 mailto:sage [2009/04/08(水) 22:10:18 ]
>>104,105
それだと、タイマーのインターバルをゆっくりにすれば発生しないはずですが、それでも発生しますし、
インターバルが短くても、Application.DoEventsを取り除くと発生しなくなります。
また、フラグを立てて(バグってたけど)同時に何度もBeginInvokeされないようにはしているので、
>>102の通り、別問題な気がします。

>>104
>>100μsなんて無理
確かに精度はよくないのですが、実際に使うときには最短で200μs程度のインターバルで使用するので、
その間隔で使用する分には何とか使用できる程度の精度は出るようです。

>>105
このサンプルでは、画面の更新しかしていないためそれでもいいのですが、実際はボタン操作や
テキスト操作なども反映させるため、Application.DoEventsを使いたいのです。

107 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:29:01 ]
DoEventsでやらずに、ピクチャーボックスのInvalidateメソッドを実行し、
描画はImageプロパティは使用せずに、Paintイベントで描画するようにすれば?
GraphicsオブジェクトはPaintイベントの引数eにe.Graphicsがあるからこれを使用して描画する

108 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:31:40 ]
テキスト操作も更新するときはそいつのInvaridateを実行。
DoEventsはプロセスすべてのイベントを処理するから重いんだよ。

109 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:03:36 ]
μsはmsの間違いだと思う。

110 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:34:43 ]
排他とかInvalidateでの再描画とかいくつか考慮は必要なのだが、
この方法でいけるはず。
基本はControl.InvokeもApplication.DoEventsも使わないことだな。

if (!abort)
{
   //c.BeginInvoke(busyMethod);
   Tick(this, EventArgs.Empty);
}

//pictureBox1.Image = image;
using (Graphics g = pictureBox1.CreateGraphics())
{
   g.DrawImage(image, 0, 0);
}

Draw(count);
count++;
//Application.DoEvents();


111 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:08:41 ]
>>96
なんか分かってるのか分かってないのかよく分からんコードだな、というのが率直な感想。
なぜそうしているのか理由や必然性がわからない部分が多すぎる。
ちょっとVB上がりのコピペプログラマの臭いがする。

つーか、せいぜい70hzでしか更新されない画面をusオーダーで更新して(そもそも不可能だけど)
なんか意味あるのかなw



112 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 01:04:43 ]
>>110
テキストの更新をするだけならInvaridateで十分なのですが、ボタン操作やメニュー、ショートカットキー等々の
UIの操作を行った際に発生するイベントを処理するためにDoEventsを差し込んでいます。
そういう意味で、ボタン操作やテキストの更新と書きました。

>>111
VBの方はほとんど触ったこと無いですw
実際に使用する際には画面更新中に発生したTickの回数分だけ処理をとばすようにはするのですが、
その前にタイマーがちゃんと動作するかどうかを確認している際に発生したのがこの現象です。
サンプルの方はDock.Fillなはずのコントロールがリサイズできてしまうということを確認してもらうために
余計にコントロールを追加していたり、タイマーが回っているのを視覚的に確認するために画面更新していたり
しますが、実際にはウインドウにHScrollBarを貼り付けても発生しますし、TickのDrawを中身空っぽのforを
10万回回した後にDoEventsするだけでも発生します。

113 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 01:13:01 ]
どんなに Interval の数値大きくしてもCPU使用率が上に張り付くんだけど
本当にこれで処理大丈夫なの?

114 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 01:29:36 ]
>>112
あほな自家製タイマーがメッセージループを占有しなければ、
>UIの操作を行った際に発生するイベント
はdoeventsなんか呼ばなくてもちゃんと処理されるのだけどね。

メッセージループ経由でのUIの更新は動画のような短時間での更新向きではない。
なんかWin3.1のころのメッセージループのアイドルにバックグランド処理をやらせる
のを念頭に置いたりしてないか。

115 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 02:46:55 ]
マイクロ秒とかそもそもリアルタイムOSじゃないWindowsには過酷すぎる要求ではないか

116 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:13:24 ]
>>112
ちょwww
スレッド分けてる意味のないコードになってるってことじゃないのか…・

117 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:16:13 ]
>>112
valid
Invalid
Invalidate

2回以上同じところを間違えると馬鹿みたいだぞ

118 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:50:34 ]
根本的にわかってないようだな

119 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:49:46 ]
vb触った事無いらしいが
作りこみがVBにしかみえない

120 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:17:54 ]
VBっぽい作り込みとC#っぽい作り込みって具体的に
どの辺が違うんですか?素で気になります。
初心者の書き方っぽいだけでVBが悪いわけじゃないのか
VBを使うと必然的にそうなるのかよく分からない。
もしかして.netのVBを指している訳じゃない?

121 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 13:26:42 ]
VB6っぽいというべきだろうな。
.NETでDoEventsを使っているなら9割がた間違った使用法と考えるべき。
何のためのスレッドかぜんぜん理解していないようだし、
Control.BeginInvokeが何をしているかも理解してないな。



122 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 17:33:25 ]
誰かFormとマルチスレッドとConrol.BeginInvokeについて説明してやれよ

123 名前:96 mailto:sage [2009/04/09(木) 20:24:27 ]
>>121
・Application.DoEventsは、処理中に発生したイベントをすべて処理する
・スレッドは重い処理などをバックグラウンドで処理させたり、処理を並列して行うことにより高速化を図る
・Control.Invokeは別スレッドからのUIの操作をUIを持つスレッドに行わせ、BeginInvokeは処理の完了を
 待たずに制御を戻し、処理の状況を確認するためのIAsyncResultを返す

と理解しているのですが、違うのでしょうか?
もし違うのであれば、参考となるページでもいいので教えていただきたいのですが…






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

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

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