1 名前:最凶VB厨房 mailto:sage [05/02/26 00:00:13 ] VB.NETの質問全般です 過去スレ VB.NET質問スレ (Part9) pc5.2ch.net/test/read.cgi/tech/1106577850/ VB.NET質問スレ (Part8) pc5.2ch.net/test/read.cgi/tech/1102512868/ VB.NET質問スレ (Part7) pc5.2ch.net/test/read.cgi/tech/1096683017/ VB.NET質問スレ (Part6) pc5.2ch.net/test/read.cgi/tech/1088812165/ VB.NET質問スレ (Part5) pc5.2ch.net/test/read.cgi/tech/1078134703/ VB.NET質問スレ (Part4) pc2.2ch.net/test/read.cgi/tech/1065269043/ 【老若】VB.net質問スレ【男女】 (Part3) pc5.2ch.net/tech/kako/1056/10562/1056281084.html 【老若】VB.net質問スレ【男女】 (Part2) pc2.2ch.net/tech/kako/1043/10436/1043629429.html 【老若】VB.net質問スレ【男女】 pc2.2ch.net/tech/kako/1025/10258/1025848458.html
452 名前:デフォルトの名無しさん mailto:sage [2005/03/28(月) 22:04:08 ] 何を騒いでるかと思えば荒らし(>>436 )を放置できない奴らの集まりか。 あ、俺もか。
453 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 06:26:50 ] ランタイム不要なアプリを作るにはどうしたらいい?
454 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 07:13:07 ] >>453 ランタイムを使わない。
455 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 13:30:07 ] 前から言ってるが、本当にバカばっかりだな。 ばかりというだけで、全員がバカではないのが救いだ。
456 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 13:32:46 ] ↑バカw
457 名前:デフォルトの名無しさん [2005/03/29(火) 18:02:05 ] あっ、あのぉ・・・ メモリエディタってあるじゃないですかぁ・・ あんな感じのメモリを弄る(?)ツールを作りたいんですけど どうやったらいいですかねw プログラミング初心者なので メモリを取得したり弄ったりできる方法を教えて下さいw
458 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 18:10:41 ] ねこまんま作者のサイトとリンクを熟読すればいいと思う。
459 名前:デフォルトの名無しさん [2005/03/29(火) 19:00:34 ] pocket PC 2003用のプログラムで 他のexeを実行するにはどうすればいい? processが使えなくて困った
460 名前:デフォルトの名無しさん [2005/03/29(火) 20:53:13 ] いまどき実メモリ好き勝手にいじること許すようなOSがあったら見てみたい。 >>457 はメモリとファイルの区別がついてないんじゃないか? バイナリエディタのこと言ってるんでしょ? こんなレベル人の作ったバイナリエディタなんて怖くて使う気しないけどw
461 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 20:58:21 ] 釣られないぞ
462 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 21:07:03 ] >>459 APIを直接操作するしかないんじゃない? Pocket PCのAPIに詳しくないからアドバイスはできないが。 Win32APIならKernel32.dllのCreateProcess関数だが。 //.NET 2.0でProcessクラスがCompact Frameworkでもサポートされるようになるようだ。
463 名前:デフォルトの名無しさん mailto:sage [2005/03/29(火) 21:15:13 ] >>458 熟読してみまーす >>460 そーなんですかぁー、もうちょっと勉強してみまーす 答えてくださった方ありあとうございました。
464 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 09:13:18 ] VB.NETとC#.NETで書いたプログラムに処理速度の違いはあるんでしょうか。 C言語の方が高速だと言いますが、.NETで書いたプログラムはビルドすると MSILという中間コードになるので基本的にはどちらも同じですよね。 ただ“VB.NET製のプログラムにはMicrosoft.VisualBasic.dllが必ずImportされて、 はずせない”ようなのでここで若干変わるんでしょう。だとしたら速度は VB.NET<C#.NET<C++.NETだと思うんですがこれで合ってるでしょうか。 C++.NETはネイティブコードもできるということで一番上です。
465 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 09:14:59 ] 有意の差はない。
466 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 20:59:10 ] .NET Frameworkって何たるかわかってないな。 MSILが何たるかわかってないな。
467 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 20:59:54 ] >>456 もバカ。 とイッテミルテスト。
468 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 21:14:06 ] >>466 誰に言ってるの?
469 名前:最凶VB厨房 mailto:sage [2005/03/30(水) 21:16:57 ] >VB.NET製のプログラムにはMicrosoft.VisualBasic.dllが必ずImportされて、 >はずせない 根拠を教えてください。
470 名前:デフォルトの名無しさん [2005/03/30(水) 21:56:41 ] >>469 そんな厨房みたいな突込みわざわざせんでも。。
471 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 21:58:56 ] ちゃんと自称してるじゃないか。
472 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 22:28:21 ] >>465 有意の差ってどういう意味?
473 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 22:28:27 ] >>464 >VB.NETとC#.NETで書いたプログラムに処理速度の違いはあるんでしょうか。 C#の方が、効率のいいCILを出力するみたいだね。 速度はわずかに違うと思う。 >VB.NET製のプログラムにはMicrosoft.VisualBasic.dllが必ずImportされて はずすことは出来るみたい。 ttp://homepage3.nifty.com/salv/vb/01/vb01_01.html
474 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 22:30:49 ] Microsoft Text Driverを使ってCSVファイルのデータを DataTableに入れたいのですが、CSVファイルの文字コードが Shift-JIS以外では文字化けして正しく取得できませんでした。 (試したのはUTF-8とEUC-JP) Shift-JIS以外のCSVファイルをMicrosoft Text Driverで 読み込むのは無理でしょうか。 objConn = New OdbcConnection objAdapter = New OdbcDataAdapter dtCsvData = New DataTable objConn.ConnectionString = "Driver={Microsoft Text driver (*.txt; *.csv)};DBQ=" & Directory.GetCurrentDirectory() & "\.." objAdapter.SelectCommand = New OdbcCommand("SELECT * FROM UTF8.csv", objConn) objConn.Open() objAdapter.Fill(dtCsvData)
475 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 23:01:14 ] >>470 しょうがないよ春休み終わるまで忍々
476 名前:デフォルトの名無しさん mailto:sage [2005/03/30(水) 23:51:04 ] Hi japanese -) im jon from new york
477 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 01:12:54 ] >>472 実感できるほど変わらないってことじゃねーの?
478 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 02:43:41 ] 2005っていつ発売なのですか?
479 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 05:06:41 ] >>470 厨房みたいな突込みなのか?
480 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 09:08:57 ] どなたか>>474 をお願いします。
481 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 10:35:27 ] >>424 うぅぅ、せっかく教えて頂いたのですが、使い方が全然分かりません・・・ 分かりやすく解説してあるサイトや書籍などはないでしょうか。 MSDNに日本語のリファレンスとかないんですね・・・
482 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 10:56:05 ] やはり、バカばかりだ。 最低限の検証くらいしろよ。 せめてILレベルくらいの検証はしろ。ぼけ。
483 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 10:58:41 ] >>482 わたしのことですか?
484 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 10:59:50 ] >>482 君はそんなに優秀なのかな?このスレに誰からも 回答がつかなかった質問もたくさんあるようだけど、 どうして答えてあげないの?
485 名前:482 mailto:sage [2005/03/31(木) 11:03:55 ] うるせーな、ぼけ。わかんねーんだよ、バカ。
486 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 11:06:21 ] >>481 リファレンスぐらい英語で困る事なんかないと思うんだが……。 必要なのは型/メソッド/プロパティ名と仮引数と返値の型くらいじゃん。 統合開発環境使ってればカバーしてくれるし。 それともDOMを今までいじった事がないのか?
487 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 11:13:27 ] >>486 英語のリファレンスとは ttp://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/reference.asp のことでしょうか。 とりあえずファイルから読み込みたいのですが、IPersistFilePtrが 見当たらなくて困っています・・・
488 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 11:18:20 ] すいません。>>474 はムリでしょうか。
489 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 13:02:49 ] 自分が出来るからってきどってんじゃーねよタコ
490 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 14:24:37 ] >>487 IHTMLDocument2にキャストして、StreamReaderとかでファイルから読み込んだ文字列をwriteしてやればいいようだな。 IPersistFileは自分で定義しても何故かどうもうまくいかない。createDocumentFromUrlも。
491 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 15:45:56 ] コマンドラインパラメータを取得するにはどうしたらよいでしょうか?
492 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 15:52:52 ] Mainメソッドの引数に与えられるが、Mainメソッドは普段隠蔽されてるんだよな。 System.Environment.GetCommandLineArgsメソッド。
493 名前:デフォルトの名無しさん [2005/03/31(木) 15:57:47 ] vbのプログラム上からアクロバットリーダーを呼び出したいのですが 立ち上がるアクロバットリーダーが常に一つしか立ち上がりません。 ファイル名が異なれば新しくアクロバットリーダーを立ち上げたいのですが どうしたらいいんでしょうか? 以下はアクロバットリーダーを立ち上げている部分のソースです Dim myProcess As Process Dim startInfo As ProcessStartInfo startInfo = New ProcessStartInfo(Path) myProcess = Process.Start(startInfo)
494 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:03:35 ] >>482 お前、いったい誰に言ってんの?
495 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:05:48 ] >>494 反応するような、藻前みたいなヤツに言ってるんだろう (プ
496 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:06:38 ] >>492 さんきゅう!
497 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:14:49 ] >>490 >IHTMLDocument2にキャストして、StreamReaderとかでファイルから読み込んだ文字列をwriteしてやればいいようだな。 申し訳ないのですが、サンプルソースを載せていただけないでしょうか。
498 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:22:04 ] >>495 オレのレスがおかしかったのか、気になったんでな。
499 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:23:07 ] >>497 えー。それくらい書こうよー。 Dim doc As New mshtml.HTMLDocument() Dim sr As New StreamReader("c:\hoge.html", System.Text.Encoding.GetEncoding("Shift_jis")) Dim doc2 As mshtml.IHTMLDocument2 = doc doc2.write(sr.ReadToEnd()) doc2.close() sr.Close() Dim elem As mshtml.IHTMLElement For Each elem In doc.all Debug.WriteLine(elem.tagName) Next
500 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 16:36:24 ] >>493 どういう状況になってるのかは書いてないから分からないけど、 アクロバットリーダーの制限じゃないの? 私のとこのアクロバットリーダー7.0だと、初めにプロセスが一つ立ち上がって、 その後Prcess.StartするたびにMDI子ウィンドウが増えるようになるが。
501 名前:デフォルトの名無しさん [2005/03/31(木) 17:05:17 ] >>500 ありがとうございます。 >Prcess.StartするたびにMDI子ウィンドウが増えるようになるが。 のレスで自分の間違いに気づきました。 アクロバットを立ち上げるメソッド内でProcessを宣言して 正常に起動したらProcessはcloseしていました。 フォームが立ち上がってる間はProcessはcloseせずに ずっと開きっぱなしにしておかないと駄目だったんですね。 お手数おかけしました。
502 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 17:21:20 ] ShowDialogで生成されたインスタンスって ほおって置けば勝手にガベージされるの? それともDisposeしないと永久に残る?
503 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 17:30:05 ] >>499 んー、ヘタなソースですが参考にさせて頂きます。
504 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 17:52:44 BE:157221599- ] タダで他人にコード書かせておいて「下手なソース」とかよく言えるよな。
505 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 17:53:24 ] >>502 DisposeはGCとは関係ないぞ。 参照が無くなったらGCの対象になる。
506 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 18:07:18 ] >>505 トンクス どうやら勘違いしてたようです ボタンクリック等のプライベート関数で FormをShowDialogすると アプリケーション終了の段階でようやくForm.Disposeが走ってたので CGがDisposeを実行してるのかと もうちょっと調べてみますです
507 名前:デフォルトの名無しさん [2005/03/31(木) 18:25:02 ] 今すごいことに気づきました。 今まで自分で作ったソースを見ると、 イベントハンドラの第一引数senderの型が ObjectだったりSystem.Objectだったりしてます。 フォームのロードでもクロージングでもクローズドでも ボタンのクリックでもメニューのクリックでもです。 これってなんででしょうか? みなさんのソースはどうですか?
508 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 18:26:23 ] どこがすごいんだ?
509 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 18:29:00 ] senderはイベントを起こしたオブジェクトが入る。 Button1_ClickならButton1が入ってるし、Form1_LoadならForm1が入ってる。 そのためどんな型でも入るようにObject型で宣言する。 それだけの話。
510 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 19:05:35 ] > ObjectだったりSystem.Objectだったりしてます。 これも突っ込むところなのだろうか・・・?
511 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 19:20:05 ] >>504 んーと、タダからヘタでも許してあげる、ってとこですかね。
512 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 19:33:33 ] >>507 > ObjectだったりSystem.Objectだったりしてます。 同じじゃねーか
513 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 20:21:56 ] >>512 その違いも分かってないのか・・・いたたたたた・・・
514 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 21:04:25 ] どなたか>>474 をお願いします・・・
515 名前:デフォルトの名無しさん [2005/03/31(木) 21:20:18 ] CE用のプログラムで ポケットPCのシステム日付時刻を変更する方法はありませんか?
516 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 21:26:52 ] >>515 DateAndTimeモジュールのTodayプロパティ・TimeOfDayプロパティはサポートされてない?
517 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 21:38:16 ] >>516 ヘルプ
518 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 21:42:03 ] 断末魔?
519 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 21:48:24 ] >>518 そう。消えろ。
520 名前:デフォルトの名無しさん [2005/03/31(木) 22:00:56 BE:28350533-###] VC++に比べてなんでこんなにVBは簡単なのでしょうか?
521 名前:デフォルトの名無しさん [2005/03/31(木) 22:06:42 ] DateAndTime.TodayにDateを入れて変更しようとすると noSupportedExceptionのエラーが出てしまいます…
522 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 22:17:37 ] >>502 ShowDialogのときは、不要になったときに Disposeしておいた方がいい。 ほうっておいてもアプリケーション 終了時に破棄されるとは思うけど。
523 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 22:21:50 ] >>521 となるとこいつかな。 ttp://bbs.wince.ne.jp/ch1/mqbbs.cgi?MODE=MSG&NUM=10992&FILE=bbs.log.108 VBのソースなので注意。
524 名前:デフォルトの名無しさん [2005/03/31(木) 22:55:26 ] VBのやり方だと出来ないっぽいです… Microsoft.VisualBasic.DateAndTime.Todayを使おうとすると notFupportedExceptionが発生してしまっています
525 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 23:02:15 ] > VBのやり方だと出来ないっぽいです… てのはどういう意味かな? 523の話?
526 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 23:03:52 ] どなたか>>474 をお願いします。
527 名前:デフォルトの名無しさん [2005/03/31(木) 23:10:54 ] >>525 ごめんなさい 523のことです compactだと時刻設定は出来ないんですかねえ…
528 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 23:14:25 ] >>527 どうできないのかを聞くまでは。 何かの例外が投げられるのか? (リンク先で言う)SetTime関数がFalseを返すのか? 文字変換部分はうまくできているのか?
529 名前:デフォルトの名無しさん mailto:sage [2005/03/31(木) 23:27:03 ] SmtpMail使ってtext/plainなメールを送信したら本文の最後に必ず改行が足されるんですけど、 これって仕様?
530 名前:デフォルトの名無しさん [皇紀2665/04/01(金) 08:59:13 ] >>513 ObjectとSystem.Objectの違いを教えて下さい。 旧型Objectと新型Object(.NET) ってことだけで、同じですよね?
531 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 09:31:42 ] >>530 >>513 ではないが ObjectはSystem.Objectのエイリアスだよ。 要するに、同じものです。
532 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 10:01:44 ] 名前空間を理解してないんじゃない?
533 名前:デフォルトの名無しさん [皇紀2665/04/01(金) 10:14:47 ] >>531 さんくす。 でもなんで、同じForm_Loadで senderがObjectだったり、System.Objectだったりするのだろう? エイリアス使ったりそうでなかったりなのでしょう? どうして使う名前が統一してないのでしょう?
534 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 10:43:07 ] >>533 残念ながら、私はVB.NETを 使ったことがないんでよくわからないです。 >>532 名前空間は関係ないよ。
535 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 11:00:17 ] >>534 .NET使ったことなくてよくわかんねーならだまってろ。 名前空間そのものの話だろうがよ。
536 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 11:21:49 ] .NET使ったことがないとは言ってないが・・・ >名前空間そのものの話だろうがよ。 IntegerとSystem.Int32のような関係といったらわかる?
537 名前:デフォルトの名無しさん [皇紀2665/04/01(金) 11:57:59 ] >>533 ですが、なんか文がおかしいので訂正します。 ×どうして使う名前が統一してないのでしょう? ○どうして使う名前が統一されてないのでしょう? ○どうして(MSは)使う名前を統一してないのでしょう? 選択すると自動で作成されるイベントハンドラで、 Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load だったり、なんかソースが統一されてなくていやです。
538 名前:デフォルトの名無しさん [皇紀2665/04/01(金) 12:30:19 ] なんか厨房ネタが続いているなあ。。 >>536 Objectがエイリアスだと思ってるのか。。 それこそ違うよ。
539 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 12:31:53 ] >>538 じゃあ、Systemをインポートしなくても大丈夫なのは何で?
540 名前:デフォルトの名無しさん [皇紀2665/04/01(金) 12:41:08 ] >>539 ネタだと思うけど一応回答ね。 プロジェクトのプロパティを見るべし。
541 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 12:43:42 ] >>540 はっはっは、vbc.exeでメモ帳に書いたソースをコンパイルした事もないのかい?
542 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 12:45:00 ] うろ覚えだが、プロパティのインポートってとこ? Systemを削除してもコンパイル通るけど。
543 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 13:38:06 ] さちこさん。お茶
544 名前:デフォルトの名無しさん [皇紀2665/04/01(金) 15:00:00 ] マルチスレッドについて質問です dobon.net/vb/dotnet/programing/abortprocess.html の後半に、マルチスレッドのサンプルコードがあります。 その中で、ボタンのEnabledを変更するためや、コントロールの値を変更するために デリゲートを使用しているのですが、これはなぜでしょうか? 調べてみると、どうやら非同期デリゲートというものらしいのですが、 いかんせんスレッドもデリゲートも初心者の旧VBプログラマなので、 なぜこういうコーディングになったのかを理解したいのです。 デリゲートにすると非同期になるんですか? なぜ非同期でないとまずいのでしょう? 普通にButton1.Enabled = true とするとどうなってしまうの? どなたかお分かりになる方、ご教示ください
545 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 15:17:50 ] 文字列を指定したキーで暗号化してくれる関数を探しています。 もしご存知のかたがいましたら教えてください。 こんな感じで・・・ private function 文字列暗号化(byval s as string, byval key as string) as string
546 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 15:27:24 ] ありました。
547 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 15:28:25 ] >>544 > デリゲートを使用しているのですが、これはなぜでしょうか? Invokeを使うから。 デリゲートというのは、メソッドそのものを変数に代入できるようにしたもの。 そうすることで、例えばデリゲートを引数に取るメソッドを書くと、そのメソッド先で“デリゲートで指定されたメソッド”を実行できるようになるわけ。 で、Invokeメソッドはデリゲートを引数に取るから、デリゲートを作ってるわけ。 InvokeメソッドはForm(の基底クラスのControl)に実装されたもので、 「“自分を作ったスレッド”で、“渡されたデリゲートで指定されたメソッド”を実行する」 という働きをする。 デリゲートもクラスの一種なんだけど、宣言すると自動的にBeginInvoke/EndInvokeと言うメソッドが追加される。 これが非同期デリゲートと言って、BeginInvokeを呼び出すとそのデリゲートに指定されているメソッドが別スレッドで実行される事になる。 んだけれども、この場合は関係ない話なので、非同期デリゲートの事は棚に上げておいて良い。 あと一応フォローしておくと、「非同期で実行」=「別スレッドで実行」。 > 普通にButton1.Enabled = true とするとどうなってしまうの? なぜInvokeを使うか、というのの詳細は面倒なので省略。 ・必ずコントロールを作成したのと同じスレッドで操作しなければならない ・作成スレッドと同じスレッドで操作するのにはそのコントロールのInvokeまたはBeginInvokeを使う ・その操作処理はデリゲートでラップしてInvoke/BeginInvokeの引数に渡す という点だけ覚えればいい。 そうしない場合、「何が起こるかは保証されない」。
548 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 16:45:37 ] ネットワーク上のPCの共有フォルダにアクセスしたいのですが、 ユーザーとパスワードを指定してアクセスできるようなクラスはありますか?
549 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 16:52:30 ] クラスはない。 Win32API使うしか。
550 名前:548 mailto:sage [皇紀2665/04/01(金) 16:55:36 ] >>549 む、マジすか・・・
551 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 17:03:07 ] >>547 詳細な解説、ありがとうございます 30回くらい読み返して、ようやく意味が分かってきました ちなみに、コントロール(とか、そのスレッド内で作成されたオブジェクト)に関わらないメソッドなら そのまま呼び出してもいいという理解でよろしいですか? 数値・文字列等の演算系関数とか あ、でもStringすらクラスですよね ということは、クラスのスコープが大事ということでしょうか? 呼び出すメソッド内で作成され、消滅するクラスオンリーで構成されたメソッドなら、そのまま呼んでよし、とか プロジェクトや、フォーム全体で使用しているクラス(グローバルやソースの上の方で宣言したりするもの)を触るメソッドなら、デリゲートで呼ばないとだめ、とか マルチスレッドは奥が深いですね むずかしー
552 名前:デフォルトの名無しさん mailto:sage [皇紀2665/04/01(金) 19:05:46 ] >>551 > ちなみに、コントロール(とか、そのスレッド内で作成されたオブジェクト)に関わらないメソッドなら > そのまま呼び出してもいいという理解でよろしいですか? > 数値・文字列等の演算系関数とか 勿論。 というかInvokeしたら全てコントロール作成スレッドで実行される事になって、マルチスレッドじゃなくなってしまう。 > あ、でもStringすらクラスですよね > ということは、クラスのスコープが大事ということでしょうか? いいや、スレッドを超えてオブジェクトを共有して構わない。 寧ろオブジェクトを共有できる事にスレッドの意味がある。 Invokeしなければならないのは、コントロール(System.Windows.Forms.Controlとその派生クラス)を操作する時のみ。 ただし2つのスレッドから同時にあるオブジェクトを操作してしまったりすると問題が起こりうるから注意が必要だ。 例えばあるスレッドでArrayListをFor Eachしている時に、別のスレッドでこのArrayListにAddしたりRemoveしたりしたら、正しくFor Eachできなくなる。 そういうのを避けるためにSyncLockステートメントなどがある。