У меня есть скрипт сканирования штрих-кода. он открывает порт RS323 для ручного сканера, событие Register-objects на «DataReceived» запускает блок сценария действия для обновления полей базы данных.
все это работает при нормальной работе (из основного потока), но теперь я хотел бы сделать то же самое из пространства выполнения и вернуть штрих-код в основной поток. таким образом я бы не блокировал работающий поток.
$bcHandler =[runspacefactory]::CreateRunspace()
# set Single Threaded Apartment and reuse thread
$bcHandler.ApartmentState = "STA"
$bcHandler.ThreadOptions = "ReuseThread"
# Open the runspace
$bcHandler.Open()
$psCmd = [PowerShell]::Create().AddScript({
Param($ComPort="COM3")
$port= new-Object System.IO.Ports.SerialPort $ComPort,9600,None,8,one
Register-ObjectEvent -InputObject $port -EventName "DataReceived" -SourceIdentifier $port.PortName -Action {
# start stopwatch for perforance measurements
$StopWatch = [System.Diagnostics.Stopwatch]::StartNew()
# Read scanner buffer
$Result = ($port.ReadExisting() | Out-String).Trim()
# Send beep to handheld scanner
$port.Write([char]7,0,1)
}
})
# Open the runspace
$psCmd.Runspace = $bcHandler
$Handler = $psCmd.BeginInvoke()