Consider this small program:
class Program
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Please copy something into the clipboard.");
WaitForClipboardChange();
Console.WriteLine("You copied " + Clipboard.GetText());
Console.ReadKey();
}
static void WaitForClipboardChange()
{
Clipboard.SetText("xxPlaceholderxx");
while (Clipboard.GetText() == "xxPlaceholderxx" &&
Clipboard.GetText().Trim() != "")
Thread.Sleep(90);
}
}
I run it, and I copy a string from Notepad. But the program just gets an empty string from the clipboard and writes "You copied ".
What's the problem here? Is there something that makes clipboard access behave weirdly in a console application?
This is Windows 7 SP1 x86, .NET 4 Client Profile.
Use this function
static string GetMeText()
{
string res = "starting value";
Thread staThread = new Thread(x =>
{
try
{
res = Clipboard.GetText();
}
catch (Exception ex)
{
res = ex.Message;
}
});
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
staThread.Join();
return res;
}
In this line:
Console.WriteLine("You copied " + Clipboard.GetMeText());
The problem is that the clipboard only works with certain threading models (ApartmentState.STA) so you have to make a new thread and give it that model this code does that.
I can reproduce the problem with your code on .NET 4 Client Profile, but when I switch to .NET 4 or 4.5 it works as expected.
However, the ClipBoard.GetText()
manual states:
Use the
ContainsText
method to determine whether the Clipboard contains text data before retrieving it with this method.
I take that as an instruction, not a suggestion, so, try this:
class Program
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Please copy something into the clipboard.");
WaitForClipboardChange();
Console.WriteLine("You copied " + Clipboard.GetText());
Console.ReadKey();
}
static void WaitForClipboardChange()
{
Clipboard.Clear();
while (!Clipboard.ContainsText())
Thread.Sleep(90);
}
}
It does show the copied text, although I must say this lets my system hang horribly when I copy some text.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With