necesitaba para descargar el archivo usando WebClient
en PowerShell 2.0, y yo quería mostrar progreso de la descarga, por lo que hizo de esta manera:PowerShell: problema de espacio de ejecución con 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()
estoy recibiendo un error de There is no Runspace available to run scripts in this thread.
para el código en el controlador $downloadProgress
, que es lógico. Sin embargo, ¿cómo proporciono un Runspace
para el hilo que (probablemente) pertenece al ThreadPool
?
ACTUALIZACIÓN: Tenga en cuenta que ambos respuestas a esta pregunta vale la pena leer, y me aceptarían tanto si pudiera.
Sí, el 'New-ScriptBlockCallback' era exactamente lo que tenía en mente cuando mencioné que tendría una respuesta :) – stej
genial, ahora volví a la pregunta y No tengo ni idea de qué respuesta aceptar :) –
¡Hola, hay un método de 'Agregar-Tipo'! y aquí estaba tratando de emitir IL necesario para establecer Runspace. –