c#利用线程访问剪切板,不加线程的时候可以得到剪切板的值,但是加了线程message = Convert.ToString(Clipboard.GetDataObject().GetData(DataFormats.Text));抛出异常提示没有对对象进行实例化
private void button1_Click(object sender, EventArgs e)
{
getexc();
//Thread th = new Thread(new ThreadStart(getexc));
//th.IsBackground = true;
//th.Start();
//Thread.Sleep(100);
} public void getexc()
{
try
{
ParenthWnd = FindWindow(null, name);
string message = string.Empty;
if (!ParenthWnd.Equals(IntPtr.Zero))
{
SetForegroundWindow(ParenthWnd);
keybd_event((byte)Keys.ControlKey, 0, 0, 0);
keybd_event((byte)Keys.C, 0, 0, 0);
keybd_event((byte)Keys.C, 0, 2, 0);
keybd_event((byte)Keys.ControlKey, 0, 2, 0);
message = Convert.ToString(Clipboard.GetDataObject().GetData(DataFormats.Text));
}
if (!string.IsNullOrEmpty(message))
{
SetForegroundWindow(this.Handle);
Thread.Sleep(1000);
}
private void button1_Click(object sender, EventArgs e)
{
getexc();
//Thread th = new Thread(new ThreadStart(getexc));
//th.IsBackground = true;
//th.Start();
//Thread.Sleep(100);
} public void getexc()
{
try
{
ParenthWnd = FindWindow(null, name);
string message = string.Empty;
if (!ParenthWnd.Equals(IntPtr.Zero))
{
SetForegroundWindow(ParenthWnd);
keybd_event((byte)Keys.ControlKey, 0, 0, 0);
keybd_event((byte)Keys.C, 0, 0, 0);
keybd_event((byte)Keys.C, 0, 2, 0);
keybd_event((byte)Keys.ControlKey, 0, 2, 0);
message = Convert.ToString(Clipboard.GetDataObject().GetData(DataFormats.Text));
}
if (!string.IsNullOrEmpty(message))
{
SetForegroundWindow(this.Handle);
Thread.Sleep(1000);
}
楼上搞什么飞机,DataFormats.Text是个枚举值,怎么可能在其它线程中无法访问,好好回家看看书吧。
th.IsBackground = true;
th.SetApartmentState(ApartmentState.STA);
th.Start();
Thread.Sleep(100);
而所有的UI操作必须是单线程的...
虽然我还不清楚 剪贴 跟UI有什么关系, 不过既然放在了 WinForm 里面, 肯定是有联系的吧...