tôi cần phải tải về tập tin sử dụng WebClient
trong PowerShell 2.0, và tôi muốn hiển thị tiến trình download, vì vậy tôi đã làm nó theo cách này:PowerShell: Runspace vấn đề với DownloadFileAsync
$activity = "Downloading"
$client = New-Object System.Net.WebClient
$urlAsUri = New-Object System.Uri($url)
$event = New-Object System.Threading.ManualResetEvent($false)
$downloadProgress = [System.Net.DownloadProgressChangedEventHandler] {
$progress = [int]((100.0 * $_.BytesReceived)/$_.TotalBytesToReceive)
Write-Progress -Activity $activity -Status "${progress}% done" -PercentComplete $progress
}
$downloadComplete = [System.ComponentModel.AsyncCompletedEventHandler] {
Write-Progress -Activity $activity -Completed
$event.Set()
}
$client.add_DownloadFileCompleted($downloadComplete)
$client.add_DownloadProgressChanged($downloadProgress)
Write-Progress -Activity $activity -Status "0% done" -PercentComplete 0
$client.DownloadFileAsync($urlAsUri, $file)
$event.WaitOne()
Tôi nhận được một lỗi There is no Runspace available to run scripts in this thread.
cho mã trong bộ xử lý $downloadProgress
, hợp lý. Tuy nhiên, làm thế nào để tôi cung cấp một số Runspace
cho chuỗi (có thể) thuộc về ThreadPool
?
UPDATE: Lưu ý rằng cả câu trả lời cho câu hỏi này là đáng đọc, và tôi sẽ chấp nhận cả hai nếu tôi có thể.
Có, 'New-ScriptBlockCallback' là chính xác những gì tôi có trong tâm trí khi tôi đề cập bạn sẽ có câu trả lời :) – stej
tuyệt vời, bây giờ tôi đã quay lại câu hỏi và Tôi hoàn toàn không biết câu trả lời nào chấp nhận :) –
có phương thức 'Add-Type'! và ở đây tôi đã cố gắng phát ra IL cần thiết để thiết lập Runspace. –