0

私はSTAThreadが正確に何をするのか(何であるか)をよく知らないので、私の質問が適切に述べられているかどうかさえわかりません。

Excelの範囲の内容をクリップボードにコピーするBackgroundWorkerスレッドで実行されているプロセスがあります(Excel.Range.Copy())。コピー後、クリップボードの内容にアクセスしてテキストファイルに書き込むことができる必要がありますが、BackgroundWorkerから直接クリップボードにアクセスできないようです(BackgroundWorkerから使用Clipboard.GetText()してそのテキストをテキストファイルに書き込もうとすると、別のテキストファイルでCtrl-Vを手動で実行し、C#プロセスによってExcel範囲からコピーされたばかりのコンテンツを貼り付けることができますが、テキストは渡されません。

また、プロセスのステータスを示すProgressBarの使用を容易にするために、このプロセスをBackgroundWorkerで実行していることにも言及する必要があります。したがって、ProgressBarを使用して、BackgroundWorkerを使用せずにクリップボードのコンテンツにアクセスできるソリューションがある場合は、絶対に歓迎します。ありがとう!

4

1 に答える 1

0

これは、かなりクールでシンプルなものです。プロジェクトが WinForms ベースであると仮定すると、UI スレッドを呼び出すだけで、Microsoft 製品を操作できます。今回は Outlook を使用しましたが、Excel も次のように動作します。

BackgroundWorker bgw = new BackgroundWorker();
bgw.DoWork += new DoWorkEventHandler(this.bgw_DoWork);
bgw.RunWorkerAsync();

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    // Invoke the UI thread
    // "this" refering to the Form1, or what ever your form is
    this.Invoke((MethodInvoker)delegate
    {
        MsOutlook.ApplicationClass OutlookApplication = new MsOutlook.ApplicationClass();
        // do whatever here ... etc etc

    }
}
于 2013-08-12T11:59:10.287 に答える