简体   繁体   中英

can't get text from clipboard | c#

It doesn't show me anything inside the logBox , it just stays blank

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";
            }
        }
    }
}

You are using a background thread ( BackGroundWorker.DoWork ) to access controls on the UI thread. Controls can only be accessed from the UI thread.

Try adding a BackGroundWorker.ProgressChanged event and access your control from that. ProgressChanged runs from the UI thread.

Edit from your comment:

No, that's not what I meant, your're creating a new backgroundworker, you should use the existing one, like this:

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

Also, you need to copy text to the clipboard.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM