3

バックグラウンドスレッドからWriteObjectメソッドを呼び出すことはできません。

(WPFのように)PowerShellのメインスレッドでこのメソッドを呼び出し/ディスパッチする可能性はありますか?

コードサンプル:

protected override void ProcessRecord()
{
    base.ProcessRecord();
    ...
    Service.StartReading(filter, list => { WriteObject(list, true); } );
}

編集: スレッドからWriteObjectメソッドを呼び出した後に発生したエラー

解決策、回避策、または迅速な修正はありますか?

thx、マティアス

4

2 に答える 2

2

私は自分の問題を解決する解決策を見つけました。

  1. ConcurrentQueueを作成しました

    ConcurrentQueue<LogEntryInfoBase> logEntryQueue = 
            new ConcurrentQueue<LogEntryInfoBase>();
    
  2. バックグラウンドスレッドを開始して、アイテムをConcurrentQueueにエンキューします

    Task.Factory.StartNew(() => Service.StartReading(
            filter, EnqueueLogEntryInfoBases));
    
  3. その間、メインスレッドでこのキューからデキューしてみてください

    for ( ; ; )
    {
        LogEntryInfoBase logEntry = null;
        logEntryQueue.TryDequeue(out logEntry);
        if (logEntry != null)
        {
            WriteObject(logEntry);
        }
        Thread.Sleep(100);
    }
    

私の観点からすると、この解決策/修正は醜いですが、私の現在の問題では機能します。

于 2012-06-29T08:09:12.200 に答える
0

私はほとんど同じ問題で立ち往生していました。私の意見では、無限ループにスリープを追加することでソリューションを改善できます。もちろん、メインスレッドへのグローバル参照が必要であり、アイテムがキューに追加されるとすぐにバックグラウンドスレッドが割り込みを呼び出す必要があります。

于 2014-04-29T17:54:24.640 に答える