考虑这个小程序:
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);
}
}
我运行它,然后从记事本中复制一个字符串。但是程序只是从剪贴板中获取一个空字符串并写入“你复制了”。
这里有什么问题?在控制台应用程序中,是否存在导致剪贴板访问行为异常的原因?
这是 Windows 7 SP1 x86、.NET 4 客户端配置文件。
最佳答案
使用这个函数
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;
}
在这一行中:
Console.WriteLine("You copied " + Clipboard.GetMeText());
问题是剪贴板仅适用于某些线程模型 (ApartmentState.STA),因此您必须创建一个新线程并为其提供此代码执行该操作的模型。
关于c# - C# 控制台应用程序中剪贴板的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20407114/