如何获取带有函数参数的线程实例?

时间:2016-12-27 05:39:57

标签: .net powershell powershell-v2.0

如何使用powershell中的函数启动线程。我不想使用Start-job方法。我只需要.Net线程。 我试过这段代码:

function test-function
{
    [System.Windows.Forms.MessageBox]::Show("yes")
}
$newthread = New-Object System.Threading.Thread(test-function)

$newthread.Start()

谢谢。

4 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用RunSpace方法:

使用Ryan Witschger撰写的以下脚本..

所有评论都有明确说明如何使用它。

http://...&parent_location=Test&abc=123&&...

希望它有所帮助。

答案 1 :(得分:1)

如果您想获得剪贴板,可以使用以下API:

$getclipboardtext=""
$hwndSelect = $API::GetForegroundWindow()
$openclipboard =  $API::OpenClipboard($hwndSelect); 
[System.IntPtr]$ClipboardDataPointer = $API::GetClipboardData(13);        
if($ClipboardDataPointer -ne $null)
{
[System.IntPtr]$Length = $API::GlobalSize($ClipboardDataPointer);
[System.IntPtr]$gLock = $API::GlobalLock($ClipboardDataPointer);
$Lengthint = [int]$Length
[byte[]] $Buffer = New-Object byte[] $Lengthint;
                [System.Runtime.InteropServices.Marshal]::Copy($gLock,$Buffer, 0, $Lengthint);
$closeclipboard = $API::CloseClipboard();
$getclipboardtext =[System.Text.Encoding]::Unicode.GetString($Buffer);
}

你可以打电话给API:

Add-Type -TypeDefinition 'public class API{
[DllImport("user32.dll", SetLastError = true)]
public static extern bool CloseClipboard()};

答案 2 :(得分:0)

PetSer使用了一个线程方法,它完全可以替代Thread Start。

$r=[RunspaceFactory]::CreateRunspace(); $r.ApartmentState='STA';
$r.Open()

为了获得你可以使用的状态:

ApartmentState aps = System.Threading.Thread.CurrentThread.GetApartmentState();

答案 3 :(得分:0)

您可以使用start-job方法,例如:

start-job -scriptblock {你的脚本,功能,方法或......这里}