0

我不太熟悉 STAThread 的确切作用(是),所以我不确定我的问题是否正确陈述。

我有一个在 BackgroundWorker 线程中运行的进程,它将 Excel 范围的内容复制到剪贴板 ( Excel.Range.Copy())。复制后,我需要能够访问剪贴板内容以将它们写入文本文件,但显然剪贴板无法直接从我的 BackgroundWorker 访问(当我尝试Clipboard.GetText()从我的 BackgroundWorker 使用并将该文本写入我的文本文件时,没有文本传递,即使我可以在单独的文本文件上手动执行 Ctrl-V 并粘贴刚刚通过 C# 进程从 Excel 范围复制的内容)。

我还应该提到,我在 BackgroundWorker 中运行此进程,以方便使用显示进程状态的 ProgressBar。所以,如果有一个解决方案让我使用我的 ProgressBar 并在不使用 BackgroundWorker 的情况下访问剪贴板内容,我绝对欢迎它!谢谢!

4

1 回答 1

0

这是一些非常酷且简单的东西。只需调用 UI 线程,假设您的项目是基于 WinForms 的,那么您就可以与 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 回答