2

現在、ステータスバーのパネルの 1 つにプログレスバーを配置する必要があるプロジェクトに取り組んでいます。誰かがこれに関する経験を持っていますか、またはそれがどのように行われるかについての意見や指示を誰でも提供できますか? 私は運がない解決策を2日間探していました。特にWindowsフォームに関しては、まだ豊富なpowershellのヘルプはありません。

4

1 に答える 1

4

これは、WPK の PowerShell データ ソースで行うのは比較的簡単です。

PowerShellPackの一部として WPK を入手できます。

これは、WPK で書かれたかなりまともなプログレス ビューアーです。

New-Grid -Columns 2 {
    New-TextBlock -Margin 10 -TextWrapping Wrap -ZIndex 1 -HorizontalAlignment Left -FontWeight Bold -FontSize 12 -DataBinding @{
        "Text" = "LastProgress.Activity"
    }
    New-TextBlock -Margin 10 -ZIndex 1 -TextWrapping Wrap -Column 1 -VerticalAlignment Bottom -HorizontalAlignment Right -FontStyle Italic -FontSize 12 -DataBinding @{
        "Text" = "LastProgress.StatusDescription"
    }
    New-ProgressBar -ColumnSpan 2 -MinHeight 250 -Name ProgressPercent -DataBinding @{
        "Value" = "LastProgress.PercentComplete"
    }
} -DataContext {
    Get-PowerShellDataSource -Script { 
        foreach ($n in 1..100) {
            Write-Progress "MajorProgress" "MinorProgress" -PercentComplete $n
            Start-Sleep -Milliseconds 250
        }
    }
} -AsJob

PowerShellDataSource は、特定のストリームのすべての出力のリストと、特定のストリームで最後に出力された項目 (つまり、Progress と LastProgress) を含むオブジェクトを返します。プログレス バーを表示するには、LastProgress プロパティにバインドする必要があります。

コードの前半では、進行状況バーを宣言しています。-DataBinding パラメーターを使用すると、TextBlocks とプログレス バーが自動的にデータ コンテキストに同期されます。データ コンテキストは、このレベルで (例に示されているように) 宣言することも、親コントロールで宣言することもできます。

この例の DataContext は、Write-Progress を使用して 1/4 秒ごとにテスト メッセージを出力する単純な PowerShell スクリプトですが、任意のスクリプトを使用できます。

お役に立てれば。

于 2009-12-28T21:02:31.697 に答える