首页 > 解决方案 > 无法从剪贴板获取文本 | C#

问题描述

它没有向我显示里面的任何东西logBox,它只是保持空白

namespace Clipboard_Logger
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.RunWorkerAsync();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            logBox.SelectionStart = logBox.TextLength;
            logBox.ScrollToCaret();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            while (true)
            {
                if (Clipboard.ContainsText(TextDataFormat.Text))
                    logBox.Text = logBox.Text + Clipboard.GetText(TextDataFormat.Text) + "\r\n";
            }
        }
    }
}

标签: c#

解决方案


您正在使用后台线程 ( BackGroundWorker.DoWork) 来访问 UI 线程上的控件。控件只能从 UI 线程访问。

尝试添加一个BackGroundWorker.ProgressChanged事件并从中访问您的控件。ProgressChanged从 UI 线程运行。

从您的评论中编辑:

不,这不是我的意思,您正在创建一个新的后台工作人员,您应该使用现有的后台工作人员,如下所示:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    backgroundWorker1.WorkerReportsProgress = true;
    backgroundWorker1.ReportProgress(1);
}

此外,您需要将文本复制到剪贴板。


推荐阅读