Clipboard ASP.NET C# : Получение скопированной информации из буфера обмена

В моей задаче нужно, чтобы по нажатию кнопки содержимое буфера было записано в TextBox. Буфер полон, но при попытке получить информацию я получаю System.NullReferenceException. Проверка функцией Clipboard.ContainsText() тоже говорит о том, что буфер обмена пуст (NO_BUFFER_DATA).

Мой код:

        string GetBufferText()
        {
            System.Windows.Forms.IDataObject iData = System.Windows.Forms.Clipboard.GetDataObject();
            if (iData.GetDataPresent(System.Windows.Forms.DataFormats.Text))
            {
                return iData.GetData(System.Windows.Forms.DataFormats.Text).ToString();
            }
            return "CANNOT_GET_DATA";
        }
        protected void btnBordFromBuff_Click(object sender, EventArgs e)
        {
            //Добавление текста в буфер (Проходит успешно)
            Thread thread = new Thread(() => Clipboard.SetText(tbLink.Text));
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            //Вытягивание текста из буфера
            if (Clipboard.ContainsText())
            {
                tbMinId.Text = GetBufferText();
                tbMaxId.Text = GetBufferText();
            }
            else
            {
                tbMinId.Text = "NO_BUFFER_DATA";
                tbMaxId.Text = "NO_BUFFER_DATA";
            }
        }

Как исправить код так, чтобы Clipboard обнаружил текст, хранящийся в буфере обмена?

Использование Clipboard.SetText(tbLink.Text) без потока дает ошибку System.Threading.ThreadStateException


Ответы (1 шт):

Автор решения: Pavel Popov

Как то вы все слишком усложнили и замешали в кучу. Тест в проекте WPF.NET Framework 4.7.2, обработчик вашей кнопки. Потоки вам точно не нужны(наверное вы тестировали в консоли,а там с вас требовали поток STA), если вы используете WPF, заче тянуть Clipboard из WinForm

private void btnBordFromBuff_Click(object sender, RoutedEventArgs e)
{
    Clipboard.SetText(tbLink.Text);

    if (Clipboard.ContainsText())
    {
        tbMinId.Text = Clipboard.GetText();
    }
}
→ Ссылка