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 くらい
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を返す と理解しているのですが、違うのでしょうか? もし違うのであれば、参考となるページでもいいので教えていただきたいのですが…
124 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 20:26:59 ] そこまでわかってれば、DoEventsを使う必要には迫られないはずだが
125 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:46:32 ] >>123 VB6はバックグラウンド処理用にスレッドを自由に起動できなかった。 全部の処理はUIスレッドで実行するしかなかった。 だからビジーループ的な処理があると、それを実行している間はUIが 必然的に応答できなくなる。(だってその処理は、プロセス中の唯一のスレッドである UIスレッドで実行しているのだから。) その問題をやり過ごす(根本的解決ではない)ためにDoEventsは使われた。 ビジーループの中でDoEventsを実行してやると、その時点でキューにたまっていた ウィンドウメッセージが全て処理される。つまりユーザー目線では、UIが操作に反応する。 自由にスレッドを起動できるドトネトではわざわざUIスレッドでビジーループを 書く必要がないから、わざわざApplication.DoEventsを使用する理由は普通ないはず。
126 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 00:05:44 ] >>123 バックグラウンドのスレは高速化じゃなく、ユーザへのレスをよくするのが目的では?
127 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 00:59:33 ] マルチコア(CPU)なら、マルチスレッドは高速化に寄与するよ。
128 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 01:48:03 ] もちろん、複数スレッドで同時に仕事をやらせればの話だけどね。
129 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 01:54:50 ] そもそも、高速化 = レスポンスとスループットの向上 と考えれば間違ってないでしょ
130 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 01:58:00 ] レスポンスとスループットはトレードオフになることが多いよ。
131 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 02:26:08 ] やりかたによるけど反応返ってこなくなるもんな。
132 名前:96 mailto:sage [2009/04/10(金) 02:37:10 ] >>125 では、今回のように別スレッドからBeginInvokeなどが連続して呼ばれて結果的にビジーループ のようになってしまうような処理の場合、どのようにしてイベントを処理すればいいのでしょうか? タイマーの精度をあきらめる(そもそも無茶らしいですが)として、 while (!abort) { while (doEvent && !abort) { Thread.Sleep(1); } ... Thread.Sleep(1); } としてもTickの内容が重たいとビジーループになってしまうのですが… ここまでするくらいならSystem.Windows.Forms.Timerかなんかを使ってTickで処理時間分Intervalから引いていった方が いいような気もしますがw
133 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 02:41:48 ] UIに限って言えば UIが属していないスレッドがいくらビジーループになっても構わないのでは? あと草が邪魔
134 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 09:00:49 ] よくわからんけど、多重呼び出しにならないよう待たせるか、 呼び出す度に重い処理のスレッド作るとか
135 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 09:23:03 ] どうせDOEVENTやってんだから普通にInvokeでやってみれば? そんな重そうな処理でもなさそうだし Invokeの中身を高速化するために、画像を先に作っといてInvokeで呼び出されている関数内で転送するだけにするとか 以上ド素人の意見でした。
136 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 10:29:34 ] そもそも96はどんなソフトを作ろうとしてんだ?
137 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 10:48:24 ] CodeDomProvider.CompileAssemblyFromSource() でソースを動的にコンパイルした場合、そのソースの中から アプリ本体のクラスを使うことはできるのでしょうか?
138 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 10:55:39 ] >>137 普通に出来るでしょ 参照アセンブリに追加すれば コンパイルする前に参照するアセンブリをロードしなきゃいけないんだったかな 適当にそのアセンブリのクラスを使えばロードされる
139 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 10:59:48 ] >>137 CompilerParametersに参照をしたら出来るんじゃなかったっけ? よく憶えてないけど
140 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 11:13:08 ] >>132 わざわざdoevents使うなんて 実質シングルスレッドで動かしてますよと公言するよーなもん
141 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 19:58:48 ] >>132 言ってることがよく分からないんだけど、 例えば仮に1msの処理時間が必要な処理があるとして、 この処理を同一のスレッドで1ms未満のインターバルで繰り返すことは 太陽を西から昇らせる以上に不可能だ、というのはOK? 失礼だがなんかこのあたりの当たり前のことを理解してない気もするんだが。
142 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 20:30:55 ] >>141 まずその処理が1msで終了するのか勘定してみるといい。 スレッド起動から勘定するんだぞ。