|
■No83365 (惹起 さん) に返信 > MultiProgram_run = New Thread(AddressOf Program_runxx) With {.IsBackground = True} > MultiProgram_run.Start(hiki) 先ほどと同様に Dim t As New Thread(Sub() Program_runxx(hiki)) With {.IsBackground = True} t.Start() では駄目ということでしょうか。もしも ThreadStart デリゲートでは都合が悪いのなら、 素直に ParameterizedThreadStart デリゲートで受け渡すのが妥当かと思います。
> それとCallByName メソッドというのは何でしょうか? > これを使ったWshShell オブジェクトの呼び出し方をできれば教えていただけないでしょうか? 使用例はヘルプに書かれていますので、それを WshShell オブジェクトに適用してみてください。 全く分からないのであれば、CreateObject でレイトバインド呼び出しにしたりせず、 "Windows Script Host Object Model" を参照設定した上で、素直にアーリーバインドで呼ぶべきかと。
ただし先ほども書きましたが、そもそも VB.NET から WshShell を呼ぶことはお奨めしません。 パフォーマンスも悪いですし、呼び出しの手間もかかるだけでメリットがありません。 マルチスレッド環境からの利用を想定しているのであれば尚の事。 (WshShell は Single Thread Apartment モデルのコンポーネントです)
一応、WshShell によるデスクトップパスの取得コードも書いておきますが、 素直に .NET Framework の標準機能で取得するべきかと思いますよ。
===== .NET Framework でデスクトップのパスを取得するための標準的なコード ===== Dim desktopFolderPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
===== VB ランタイムを用いてデスクトップのパスを取得するためのコード ===== Dim desktopFolderPath As String = My.Computer.FileSystem.SpecialDirectories.Desktop
===== WshShell を参照設定してデスクトップのパスを取得するコード ===== '要 COM 参照設定 [Windows Script Host Object Model] Dim wshShell As New IWshRuntimeLibrary.WshShell() Dim wshFolders As IWshRuntimeLibrary.IWshCollection = wshShell.SpecialFolders Dim targetName As Object = "Desktop"
Dim desktopFolderPath As String = DirectCast(wshFolders.Item(targetName), String)
'COM コンポーネントの解放処理 System.Runtime.InteropServices.Marshal.ReleaseComObject(wshFolders) System.Runtime.InteropServices.Marshal.ReleaseComObject(wshShell)
===== CallByName 経由の呼び出しにて WshShell からデスクトップのパスを取得するコード ===== Dim wshShell As Object = CreateObject("WScript.Shell") Dim wshFolders As Object = CallByName(wshShell, "SpecialFolders", CallType.Get)
Dim desktopFolderPath As String = DirectCast(CallByName(wshFolders, "[DispId=0]", CallType.Get, "Desktop"), String)
'COM コンポーネントの解放処理 System.Runtime.InteropServices.Marshal.ReleaseComObject(wshFolders) System.Runtime.InteropServices.Marshal.ReleaseComObject(wshShell)
|