为什么Clipboard.Clear()在WPF中不起作用,是因为CriticalSecurity属性吗?

tcomlyy6  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(219)

我试图从我的WPF应用程序清理计算机剪贴板。代码如下:-

private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            try
            {
                Thread thread = new Thread(
                    () =>
                    {
                        Clipboard.Clear();
                    });
                thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
                thread.Start();
                thread.Join();
            }
            catch (Exception er)
            {
                MessageBox.Show(er.Message);
            }
        }

但是clear函数不工作,这不会导致异常或任何错误。我猜这是因为Clear方法上的**[SecurityCritical] Attribute**。请帮助我解决这个问题。

szqfcxe2

szqfcxe21#

这需要在具有正确安全上下文的线程上完成,可能是启动应用程序的用户的安全上下文。
当你使用new Thread这个线程不会。
要做到这一点,你可以使用RunImpersonated如下:

WindowsIdentity currentId = WindowsIdentity.GetCurrent();
                Thread thread = new Thread(
                    () =>
                    {
                        WindowsIdentity.RunImpersonated(currentId.AccessToken, () => {
                            Clipboard.Clear();
                        });
                    });
                thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
                thread.Start();
                thread.Join();

相关问题