Clipboard adalah konsep UI desktop, mencoba mengaturnya dalam kode sisi server seperti ASP.Net hanya akan menetapkan nilai pada server dan tidak berdampak pada apa yang dapat dilihat pengguna di browser mereka. Sementara jawaban yang ditautkan memungkinkan seseorang untuk menjalankan sisi server kode akses Clipboard SetApartmentStatetidak seperti apa yang ingin Anda capai.
@KierenJohnstone Apakah mungkin mengakses konten clipboard menggunakan pasangan nilai kunci?
Abdul
@ Abdul - Saya tidak yakin apa yang Anda maksud. Konten clipboard dapat berupa teks, file, gambar, segala jenis data khusus. Konsep kv-pair sepertinya tidak ada hubungannya dengan ide clipboard?
Kieren Johnstone
@KierenJohnstone yang saya coba buat adalah sesuatu di sana pengguna dapat menyimpan banyak hal di clipboard. Hal-hal itu akan diakses oleh kunci. Ini mirip dengan penyimpanan lokal HTML5. Atau apakah sesuatu seperti itu tidak mungkin karena sifat clipboard?
Abdul
Jika Anda mendapatkan kesalahan dengan ASP.NET, coba gunakan ke utas baru: var utas = utas baru (param => {Clipboard.SetText (txtName.Text);}); thread.SetApartmentState (ApartmentState.STA); thread.Start ();
user3790692
1
Jawaban skia.heliou membantu saya: setelah menambahkan atribut [STAThreadAttribute], metode Clipboard.SetText saya mulai berfungsi
viteo
44
Untuk proyek konsol dengan cara selangkah demi selangkah, Anda harus terlebih dahulu menambahkan System.Windows.Formsreferensi. Langkah-langkah berikut ini berfungsi di Visual Studio Community 2013 dengan .NET 4.5:
Di Solution Explorer , rentangkan proyek konsol Anda.
Klik kanan Referensi , lalu klik Tambahkan Referensi ...
Di grup Assemblies , di bawah Framework , pilih System.Windows.Forms.
Klik OK .
Kemudian, tambahkan usingpernyataan berikut dengan yang lain di bagian atas kode Anda:
using System.Windows.Forms;
Kemudian, tambahkan salah satu dari yang berikut ini Clipboard. SetTextpernyataan untuk kode Anda:
Kelas StackOverflowExceptionsegera mendahului STAThreadAttributedalam .NET Framework System Class Library =)
skia.heliou
42
Pengalaman saya dengan masalah ini menggunakan WPF C # coping ke clipboard dan System.Threading.ThreadStateExceptionada di sini dengan kode saya yang bekerja dengan benar dengan semua browser:
Thread thread =newThread(()=>Clipboard.SetText("String to be copied to clipboard"));
thread.SetApartmentState(ApartmentState.STA);//Set the thread to STA
thread.Start();
thread.Join();
Clip.exe adalah executable di Windows untuk mengatur clipboard. Perhatikan bahwa ini tidak bekerja untuk sistem operasi lain selain Windows, yang masih menyebalkan.
/// <summary>/// Sets clipboard to value./// </summary>/// <param name="value">String to set the clipboard to.</param>publicstaticvoidSetClipboard(stringvalue){if(value==null)thrownewArgumentNullException("Attempt to set clipboard with null");Process clipboardExecutable =newProcess();
clipboardExecutable.StartInfo=newProcessStartInfo// Creates the process{RedirectStandardInput=true,FileName=@"clip",};
clipboardExecutable.Start();
clipboardExecutable.StandardInput.Write(value);// CLIP uses STDIN as input.// When we are done writing all the string, close it so clip doesn't wait and get stuck
clipboardExecutable.StandardInput.Close();return;}
Jawaban:
Ada dua kelas yang hidup di majelis yang berbeda dan ruang nama yang berbeda.
WinForms: gunakan deklarasi namespace berikut, pastikan
Main
ditandai dengan[STAThread]
atribut:WPF: gunakan deklarasi namespace berikut
konsol: tambahkan referensi
System.Windows.Forms
, gunakan deklarasi namespace berikut, pastikanMain
ditandai dengan[STAThread]
atribut. Panduan langkah demi langkah dalam jawaban lainUntuk menyalin string yang tepat (dalam hal ini literal):
Untuk menyalin konten kotak teks, gunakan TextBox.Copy () atau dapatkan teks terlebih dahulu lalu tetapkan nilai clipboard:
Lihat di sini untuk contoh . Atau ... Dokumentasi resmi MSDN atau Di Sini untuk WPF .
Catatan:
Clipboard adalah konsep UI desktop, mencoba mengaturnya dalam kode sisi server seperti ASP.Net hanya akan menetapkan nilai pada server dan tidak berdampak pada apa yang dapat dilihat pengguna di browser mereka. Sementara jawaban yang ditautkan memungkinkan seseorang untuk menjalankan sisi server kode akses Clipboard
SetApartmentState
tidak seperti apa yang ingin Anda capai.Jika setelah mengikuti informasi dalam kode pertanyaan ini masih mendapatkan pengecualian, lihat kesalahan "Thread saat ini harus diatur ke apartemen single thread (STA)" dalam string salinan ke clipboard
Pertanyaan / jawaban ini mencakup .NET biasa, untuk .NET Core lihat - .Net Core - salin ke clipboard?
sumber
Untuk proyek konsol dengan cara selangkah demi selangkah, Anda harus terlebih dahulu menambahkan
System.Windows.Forms
referensi. Langkah-langkah berikut ini berfungsi di Visual Studio Community 2013 dengan .NET 4.5:System.Windows.Forms
.Kemudian, tambahkan
using
pernyataan berikut dengan yang lain di bagian atas kode Anda:Kemudian, tambahkan salah satu dari yang berikut ini
Clipboard
.SetText
pernyataan untuk kode Anda:Dan terakhir, tambahkan metode
STAThreadAttribute
AndaMain
sebagai berikut, untuk menghindariSystem.Threading.ThreadStateException
:sumber
StackOverflowException
segera mendahuluiSTAThreadAttribute
dalam .NET Framework System Class Library =)Pengalaman saya dengan masalah ini menggunakan WPF C # coping ke clipboard dan
System.Threading.ThreadStateException
ada di sini dengan kode saya yang bekerja dengan benar dengan semua browser:kredit untuk posting ini di sini
Tapi ini hanya berfungsi di localhost, jadi jangan coba ini di server, karena ini tidak akan berfungsi.
Di sisi server, saya melakukannya dengan menggunakan
zeroclipboard
. Satu-satunya cara, setelah banyak penelitian.sumber
Anda harus menggunakan ruang nama
System.Windows.Forms
atauSystem.Windows
untuk itu.sumber
Clip.exe adalah executable di Windows untuk mengatur clipboard. Perhatikan bahwa ini tidak bekerja untuk sistem operasi lain selain Windows, yang masih menyebalkan.
sumber