トップページ⇒tech
1001コメント316KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/04/01(水) 10:15:52
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

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

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

その他テンプレ>>2-5くらい
0002デフォルトの名無しさん2009/04/01(水) 10:16:30
関連スレ

ふらっとC#,C♯,C#(初心者用) Part39
http://pc12.2ch.net/test/read.cgi/tech/1237051173/

Visual Studio 2008 Part 15
http://pc12.2ch.net/test/read.cgi/tech/1233853864/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
http://pc12.2ch.net/test/read.cgi/tech/1231506876/

【VB.NET】LINQ友の会【C#, C♯, C#】
http://pc12.2ch.net/test/read.cgi/tech/1202568694/

C#,C#の宿題片付けます。
http://pc12.2ch.net/test/read.cgi/tech/1197620454/
0003デフォルトの名無しさん2009/04/01(水) 10:16:47
参考リンク

MSDNライブラリ
http://msdn.microsoft.com/ja-jp/library/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/
MSDN フォーラム
http://forums.microsoft.com/MSDN-JA/default.aspx?SiteID=7

pinvoke.net: the interop wiki!
http://pinvoke.net/
宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/
WisdomSoft Microsoft .NET入門
http://wisdom.sakura.ne.jp/system/msnet/
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
0004デフォルトの名無しさん2009/04/01(水) 10:17:03
質問する前に"必ず"WikiやFAQ集を参照し、同じような質問がないか確認してください。

初歩的な質問はPC初心者板で・・・
http://pc11.2ch.net/pcqa/
参考リンク(よく出てくる情報リンク)
Windows Vista Wiki
http://windowsvista.ms/index.php
Windows VistaFAQ
http://vistafaq.stdo.net/index.html
インストールから設定・活用まで〜 すべてが分かるWindows Vista大百科
http://journal.mycom.co.jp/special/2007/windowsvista/menu.html
0005デフォルトの名無しさん2009/04/01(水) 13:37:14
1おつ
0006デフォルトの名無しさん2009/04/01(水) 14:12:43
乙です。

C#3.0対応のデザインパターンの解説書かサイトで、
日本語で書かれているのってないですかね?

英語なら、オライリーからC#3.0のデザインパターン本が出てたのですが。
0007デフォルトの名無しさん2009/04/01(水) 14:23:36
>>1乙
0008デフォルトの名無しさん2009/04/01(水) 19:29:46
誘導くらいしろよはげ
死ぬの?
0009デフォルトの名無しさん2009/04/01(水) 19:32:36
>8
ひどいフシアナ
0010デフォルトの名無しさん2009/04/01(水) 20:02:02
TreeView で現在選択されているのが、最下段ノードであるかどうかを取得するには
どういう方法が一番よいでしょう?
0011デフォルトの名無しさん2009/04/01(水) 20:22:02
GetNodeCount
0012デフォルトの名無しさん2009/04/02(木) 00:28:39
>>8
こいつはろくなコード書けないんだろうな
0013デフォルトの名無しさん2009/04/02(木) 01:33:13
ID出ない板で荒らし、かっこいいです
0014デフォルトの名無しさん2009/04/02(木) 07:42:58
>>635
英語ドキュメントを読むコツは、最初は辞書を引かない事
高卒レベルの英語で、おおまかな部分は読める
一度通して読んだあと、大体ネックになる重要単語が見えてくるはずだから、
その時辞書を引いて調べればいい
英語が苦手っていう奴は英語をすべて日本語に訳してから理解しようとしている
英語は英語として理解するのが簡単
0015デフォルトの名無しさん2009/04/02(木) 09:07:42
>>11
どもでした! 
0016デフォルトの名無しさん2009/04/02(木) 15:37:51

★「完全無所属」実は「自民支部長」…千葉知事当選の森田氏
http://tsushima.2ch.net/test/read.cgi/newsplus/1238600250/

・千葉県知事選で100万票余を獲得して初当選した元衆院議員の森田健作氏(59)が、
 現在も東京都の自民党支部長を務めていたことがわかった。

 森田氏は、政党と距離を置く「完全無所属」をアピールして無党派層の支持を集めており、
 一夜明けた30日の記者会見で「近く支部を解散したい」との考えを明らかにした。
 
 森田氏が支部長を務めるのは、自民党東京都衆議院選挙区第2支部(東京都中央区)。
 森田氏が参院議員だった1995年1月に設立された。衆院議員に転じた森田氏が2003年
 10月に辞めた後も、支部は存続している。

 収支報告書によると、支部長の登録は本名の「鈴木栄治」。04〜07年には計1億6185万円の
 企業・団体献金を受け、同時期に計1億5030万円を、同支部と同じ事務所で、森田氏が代表を
 務める資金管理団体「森田健作政経懇話会」に寄付していた。

 使途については、「知事選には使っていない。知事選に無所属での出馬を決意する前に、
 自民党候補の応援などのために使った」と釈明した。
 http://www.yomiuri.co.jp/politics/news/20090330-OYT1T00515.htm

0017デフォルトの名無しさん2009/04/02(木) 16:30:20
>>16
朝日新聞の中の人ですか、携帯からご苦労様です。早くアク禁解除されるといいですね。
0018デフォルトの名無しさん2009/04/04(土) 02:38:58
k個あってn角形の3次元配列を作成していまして
現在ファイルから配列に格納するところで躓いています。
図形1=X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5.....................  
図形2=.....
これを[図形][座標点][X,Y]という形に格納する形式です List_POS[0][1][0]で例外が出てしまいます
どうしたらいいのでしょうか? ジャグ配列なら実現できたのですがListにしてワーカースレッドから動的に追加もしたいので

int a=0,b=0,c=0;
int line_count = arrText.Count;
public List<int[]>[] List_POS = new List<int[]>[line_count];//第一要素を可変長にしたい
for (int i = 0; i < List_POS.Length; i++)
   List_POS[i] = new List<int[]>(new int[][] { new int[2] });
foreach (string sOutput in arrText){// 一行ずつ読み込んで,各行をsplitメソッドで分ける
    string temp = (string)arrText[a]; // string型にキャスト
    string[] temp2 = temp.Split(',');// splitメソッドで文字列アレイにして数える
    int col_count = temp2.Length; // 列数を数えているだけ
    string[] temp_line = sOutput.Split(',');
    for(int i=0;i<temp_line.Length;i++){
for(int k=0;k<2;k++){
   i = i + k;
   List_POS[a][b][c]=Convert.ToInt32(temp_line[i]);
   c++;
}
c = 0;
b++;
    }
    b = 0;
    a++;
}
0019デフォルトの名無しさん2009/04/04(土) 02:42:58
List<int[][]>にすればいいんじゃない?
int[][]をオブジェクトにしてもいいような気もする
0020デフォルトの名無しさん2009/04/04(土) 04:40:03
>>18
List_POS[0][0] しか作ってないのに、List_POS[0][1] にアクセスしたら
当然例外になるわな

> 第一要素を可変長にしたい
はずなのに二番目を List にしてるのは何で? (多分、>>19と同じ)
図形数を可変にするんじゃないの?

あと、要素(element)ってコレクションの中身のことだから
0021デフォルトの名無しさん2009/04/04(土) 13:49:36
いろいろ混乱してとりあえず 整理のためにこんな感じなのかなとコードを書いてみます
 
public List<int[][]> List_POS;
int a=0,b=0,c=0;
int line_count = arrText.Count;
List_POS; = new List<int[][]>();
foreach (string sOutput in arrText){
     string temp = (string)arrText[a]; // string型にキャスト
     string[] temp2 = temp.Split(',');// splitメソッドで文字列アレイにして数える
     int col_count = temp2.Length; // 列数を数えているだけ
     List_POS[a] = new List<int[][]>(col_count/2);//XYで2つ使うため一行を2で割る
     string[] temp_line = sOutput.Split(',');
     for(int i=0;i<temp_line.Length;i++){
        List_POS[a][b]=new List<int[][]>(2);
        for(int k=0;k<2;k++){
          i = i + k;
          List_POS[a][b][c]=Convert.ToInt32(temp_line[i]);
.....

0022デフォルトの名無しさん2009/04/04(土) 13:55:45
なんつーキモキモ変数名
0023デフォルトの名無しさん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[]だよ
0024デフォルトの名無しさん2009/04/04(土) 18:21:31
0xEDB88320 ^ 0
の演算結果が
0xEDB88320
となるのはなぜ?
VB.NETだと1になるんだけど
0025デフォルトの名無しさん2009/04/04(土) 18:32:47
なぜも何も普通だろ。
VBのほうが謎だ。
0026デフォルトの名無しさん2009/04/04(土) 18:38:14
>>24-25
VBの^は冪乗、C#の^はビット毎の排他的論理和。
0027デフォルトの名無しさん2009/04/04(土) 19:02:40
>>26
そうでしたか、ありがとう。
0028デフォルトの名無しさん2009/04/05(日) 00:15:19
>>23 なるほど
rcm.List_POS.Add(new int[col_count / 2][]);
rcm.List_POS[a][b]=new int[2];
こういう風に修正したら通りました
二行目もできるかどうか試してみます。
0029デフォルトの名無しさん2009/04/05(日) 09:56:34
>>28
あんたさ、もっと読みやすさを心がけてかいてよ
せっかくオブジェクト指向言語使ってんだからさ
このプログラムを保守するはめになったやつのことも考えようぜ
0030デフォルトの名無しさん2009/04/05(日) 10:35:07
3次元配列ってところがダメだよな。
図形クラス作るのが普通じゃね?
0031デフォルトの名無しさん2009/04/05(日) 11:36:19
コードの読み易い、読み難いってのは
オブジェクト指向関係ないと思うよ
OO厨なら仕方ないが
0032デフォルトの名無しさん2009/04/05(日) 13:10:16
同意
0033デフォルトの名無しさん2009/04/05(日) 13:19:04
なんで関係ないのかと
オブジェクト指向のパッケージ化だけ考えても
データと振る舞いを結び付け、可読性を向上してるだろ
納得できる理由を書いてみろ
0034デフォルトの名無しさん2009/04/05(日) 13:26:25
・継承によるコードの隠蔽,初期化の順番の制約がわけわからんになりやすい
・再利用を謳っているために,同じ"ような"コードがあるか探さないといけない.
 それを怠ると車輪の再発明の連続
・目的のために様々な手段が用意されすぎている
・>>33みたいな奴がOOPLすごいよ!クラスで設計図が継承で再利用!しかも大規模開発に剥いているよ!
 って幻想を吹き込んでくる
0035デフォルトの名無しさん2009/04/05(日) 13:28:03
>>33
OOはパラダイムなので「可読性の向上」まではどう考えても含んでいない
なのに>>33が可読性の向上とか言い出している辺りが幻想,ね
0036デフォルトの名無しさん2009/04/05(日) 13:45:57
OO=可読性の向上ではないが、>>21のコードが見難く、保守のし難いコードであるのは事実。
0037デフォルトの名無しさん2009/04/05(日) 16:55:47
複数台マシンがあって、使用メモリが少ない方で処理を行うようにしたいのですが、
他のマシンの利用可能メモリなどを取得したいのですが、
どのようにしてとればいいのか、教えてくだされ(;´д⊂)

Processなら、 Process.GetProcessesとかでとれるんですが。。。
0038デフォルトの名無しさん2009/04/05(日) 17:02:07
>>37
なんかずいぶん無茶なこと言ってるぞ。
アプリケーションが自前でロードバランスするのか。
もちろん実験ならいいんだけど、背景は何?
0039デフォルトの名無しさん2009/04/05(日) 17:11:08
>>37
何がやりたいのかさっぱりわからんけど
各々のマシンで動かすアプリがそれぞれのメモリ残量を返すようにすればいいんじゃねーの?
0040デフォルトの名無しさん2009/04/05(日) 17:18:47
まずはOOじゃなくて構造化プログラミングをば
0041デフォルトの名無しさん2009/04/05(日) 18:09:50
その前に2chを卒業
0042372009/04/05(日) 18:13:52
>>38,39

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

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

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

さすがにむりなのかな?^^;
0043デフォルトの名無しさん2009/04/05(日) 18:15:35
>40

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

http://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
0044デフォルトの名無しさん2009/04/05(日) 18:18:37
宣伝乙
0045デフォルトの名無しさん2009/04/05(日) 18:22:07
誰でも知ってるから。
0046デフォルトの名無しさん2009/04/05(日) 19:33:31
そんな取り回しの悪い複雑なものを作って喜んでるのは初心者くらいなもの
誇らしげに言うようなことじゃない
0047デフォルトの名無しさん2009/04/05(日) 19:36:35
これはどう見ても釣り
ttp://plaza.rakuten.co.jp/u008expert/
こいつに悪意をもつものの仕業に違いない
0048デフォルトの名無しさん2009/04/05(日) 19:54:37
何処に書けばいいのか分からんかったんだけど、
DirectoryEntry使ってiPlanetのディレクトリ更新しようとしていて
ユーザーとかのプロパティを見る参照は上手くいくんだが
プロパティ変更してCommitChanges呼ぶとエラーになる。

ADだと上手くいくんだけど、iPlanetが特殊なんかな。それとも
DirectoryEntryがPureなLDAP話さないでAD固有な話し方してるからかな。
0049デフォルトの名無しさん2009/04/05(日) 20:11:48
>>43
当たり前のことすぎて触れることじゃない。
0050デフォルトの名無しさん2009/04/05(日) 20:13:09
>>42
#1 > LANにつながった他のマシンの現在のメモリ使用量などを調べる方法
#2 WANにつながった他のマシンの現在のメモリ使用量などを調べる方法
#3 近所につながった他のマシンの現在のメモリ使用量などを調べる方法
そんな複雑なケースに対応するようにAPIが提供されているわけではありません

というわけで,マシンの現在のメモリ使用量(?????どんなの想像してる?シングルプロセス,シングルコアなマシンでの使用量?)を取得する
のと,TCP/IPかなんか使って通信するものを組み合わせればいいんでねーの?
0051デフォルトの名無しさん2009/04/05(日) 20:13:55
Dictionary<string,int>をラップして分かりやすいクラスにして
さらにList<MyClass>にした方がいいことが多いから
List<Dictionary<string,int>>は使われない
0052デフォルトの名無しさん2009/04/05(日) 20:14:17
>>43
むしろ"abc"[0]とか,トリッキーなコードになってしまうような気がする
0053デフォルトの名無しさん2009/04/05(日) 20:33:08
>>50
各PCでそういうサービスを立ち上げておけばOKだね
0054デフォルトの名無しさん2009/04/05(日) 20:55:29
というわけでWMIでリモートのPC参照すれば可能かも
http://d.hatena.ne.jp/seki-moto/20081014/wmi2
0055デフォルトの名無しさん2009/04/06(月) 08:03:03
C#の本の質問もここでいいのかな?

ある程度C#についてオブジェクト指向とか綺麗なコードの書き方含めて載ってる本ないですか?
独習C#か、プログラミングC#がそれっぽい雰囲気出てたんだけど……。
洋書でも可です。
0056デフォルトの名無しさん2009/04/06(月) 08:33:42
>>55
アマゾンカテゴリランキングの1〜100位探してみろよ
0057デフォルトの名無しさん2009/04/06(月) 09:18:36
身も蓋もないなw
まああっちはレビューも書いてあるしなあ。
0058デフォルトの名無しさん2009/04/06(月) 09:56:42
>>56-57
サンクス。
C#クイックブックもよさげかな……。
今度本屋で見て見よう。
0059デフォルトの名無しさん2009/04/06(月) 10:05:29
レビューはあんまあてにならないだろw
0060デフォルトの名無しさん2009/04/06(月) 10:36:11
ここでの評価もあてにならんからどっこいどっこいだ
うまく本の当り掴めるようになりたいもんだ・・・技術書安くないもんなあ
0061デフォルトの名無しさん2009/04/06(月) 10:37:29
図書館おいしいです
0062デフォルトの名無しさん2009/04/06(月) 12:17:17
洋書でいいなら、googleやSafariで立ち読みすればいい。
0063デフォルトの名無しさん2009/04/06(月) 12:36:24
もちろん、座って読んでもOKだ
0064デフォルトの名無しさん2009/04/06(月) 14:34:28
だがうんこ座りはご遠慮いただきたく。
0065デフォルトの名無しさん2009/04/06(月) 15:26:55
例えばLabelを継承した独自のカスタムコントロールで
継承元のTextAlignとかを使う側に見せないようにするとかは簡単に出来ますか?

Internalとかで上書きしてやればできそうだけど、なんかスマートでない気がするし・・・
継承という以上仕方がないとは思っていますが
0066デフォルトの名無しさん2009/04/06(月) 15:38:44
なんで機能を継承してるのに隠蔽する必要があるの?
っていう話に落ち着くぜ
0067デフォルトの名無しさん2009/04/06(月) 16:08:04
そういう場合って継承するんじゃなくインスタンスをプライベートに持って
アクセサを作るのが普通なんじゃない?
#言語仕様とは別のデザパタのdelegationって奴になるのか?

継承してるのに使えないとかはOOの性質上無理だと思うけど。
0068デフォルトの名無しさん2009/04/06(月) 16:11:45
>>66
>>67
ですよね
今作られている既存のカスタムコントロールがそう作られていて大きく変えないようにするにはどうかなと考えていたんですが・・
おとなしく新しく作り直してそっちに変更するように要望をかけるとします。
0069デフォルトの名無しさん2009/04/06(月) 17:12:19
TextAlignは見えるけど,機能上使えない,っていう特殊化ならアリ
0070デフォルトの名無しさん2009/04/06(月) 17:34:53
継承はis aの関係が基本で、決してカスタマイズ/再利用じゃないからね。
継承元で出来る事が継承先で出来なくなるのは有り得ない。
0071デフォルトの名無しさん2009/04/06(月) 17:35:33
既存のコントロールを内包してるけど、
別物として扱いたいってことか。
セットされた値を何かしらの方法で計算して表示するコントロールでほとんどラベルなんだけど、
表示されてるテキストは直接書き換えはさせたくないみたいな。
0072デフォルトの名無しさん2009/04/06(月) 17:39:20
ググったら似たような質問あったよ
件名:[C#]コントロールのプロパティ固定(継承)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42032&forum=7
セッターを空のメソッドでオーバーライドして殺してるみたい。

質問の内容自体に対する評価はここと似たようなもんだな。
0073デフォルトの名無しさん2009/04/06(月) 17:43:11
youtubeとかニコニコの動画のダウンロードってどうやるの?
0074デフォルトの名無しさん2009/04/06(月) 17:54:04
一度言ってみたかった・・・
「ググれカス」
0075デフォルトの名無しさん2009/04/06(月) 18:16:56
>>55
洋書でいいなら、中国語でいい本がある
0076デフォルトの名無しさん2009/04/06(月) 18:18:01
グぐってきました・・・で、動画のurlの特定ってどうやるんですか?
0077デフォルトの名無しさん2009/04/06(月) 18:23:40
>>76
  。     。
    。  。 。 。 ゚
   。  。゚。゜。 ゚。 。
  /  // / /
 ( Д ) Д)Д))
0078デフォルトの名無しさん2009/04/06(月) 18:29:53
C#に特定した話じゃないなあそれ
0079デフォルトの名無しさん2009/04/06(月) 18:35:29
・・・もういいです・・・使えない人たちですね
0080732009/04/06(月) 18:39:47
>79
これ誰だよw

C#じゃないみたいなんで、他所のスレ探します
0081デフォルトの名無しさん2009/04/06(月) 18:43:39
取り敢えず公式見てこいよ。
「正当な」方法でどうやって情報取得するかきっちり書いてあるんだから。
0082デフォルトの名無しさん2009/04/06(月) 18:44:58
公式はどこにあるのですか?
教えて下さい
0083デフォルトの名無しさん2009/04/06(月) 18:48:53
そりゃニコニコやyoutubeのトップから辿れよ
0084732009/04/06(月) 18:53:18
>>81
ありがとう調べてみます

>>82
だから誰だよww
0085デフォルトの名無しさん2009/04/06(月) 18:58:28
>>75
中国無理っす
0086デフォルトの名無しさん2009/04/06(月) 19:00:20
>>80,84
いい加減にしてください・・・誰なんですか・・・
0087デフォルトの名無しさん2009/04/06(月) 19:07:16
これが無職いたのよいところ
0088デフォルトの名無しさん2009/04/06(月) 19:16:56
ここまで全部俺の(ry
0089デフォルトの名無しさん2009/04/06(月) 19:22:05
もう私のために争うのはやめて!
0090デフォルトの名無しさん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が違う理由をわかる方いたら併せてお願いします
0091デフォルトの名無しさん2009/04/06(月) 20:07:24
違っていてってどう違ってるのかぐらい教えてくれよ。
User-Agentあたり見て出力内容わけてたりしてな。
0092デフォルトの名無しさん2009/04/06(月) 20:13:43
>>90
ううむ。折れんところで試してみたが、一応完全に?読めたけど。
0093デフォルトの名無しさん2009/04/06(月) 20:15:57
>>90
> ソースとwebBrowserのhtmlが違う理由
ブラウザがパースしたDOMをテキスト表現にしているからだとおも
0094デフォルトの名無しさん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/
0095デフォルトの名無しさん2009/04/06(月) 22:15:40
>>94
がんばればできる。
0096デフォルトの名無しさん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を実行したいのですが…
0097デフォルトの名無しさん2009/04/08(水) 16:04:51
とりあえず俺の環境では起きないんだが
0098962009/04/08(水) 17:32:32
>>97
こちらでは、スクロールバーの右の矢印部分を連打(結構なスピードで)すると簡単に発生するのですが…
スクロールバーの描画が破綻した後、右矢印部分になぜか点々(サイズ変更可能なウインドウに表示されてたり
するアレ)が表示されます。
こうなると、スクロールバーは完全に機能しなくなり、スクロールバーのあった部分は再描画が無効になります。
0099デフォルトの名無しさん2009/04/08(水) 18:07:52
>>98
俺も結構な速度でやってみたんだけどな
それこそクリックしたら画面の女の子脱ぎますよと言われたくらいの速度でw
ほぼ同じ環境の後輩に同じことやらしてみたけど症状が出てない


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

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

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

例えば、DoEvents()の後にThread.Sleep(100);と書き、スクロールバーを右クリックしてみるといい。
運良くこっちと似た環境ならば、100%の確率でスタックオーバーフローするので
スタックトレースを見れば原因がわかるはず。
0101 [―{}@{}@{}-] デフォルトの名無しさん2009/04/08(水) 18:25:08
>>98
ディスプレイドライバのせいだったりして
ハードウェアアクセラレータ無効にすると治るとかない?
■ このスレッドは過去ログ倉庫に格納されています