C# 清除剪贴板

C# 清除剪贴板,c#,console,clipboard,C#,Console,Clipboard,我有以下C语言的控制台应用程序# 据推测,应用程序每秒都会清除剪贴板。然而,它不起作用。有什么问题 编辑: 我刚刚编辑了代码。当我试图运行程序时,剪贴板仍然没有被清除。发生了什么事?在timer1.Start()之后移动Console.ReadLine() 当前,应用程序正在等待enter键,然后启动计时器并立即存在 关于您编辑的帖子: 您正在使用System.Windows.Forms中的计时器,它不适用于控制台应用程序。尝试使用系统中的计时器。计时器 您需要在ReadLine()调用之前设置

我有以下C语言的控制台应用程序#

据推测,应用程序每秒都会清除剪贴板。然而,它不起作用。有什么问题

编辑:


我刚刚编辑了代码。当我试图运行程序时,剪贴板仍然没有被清除。发生了什么事?

timer1.Start()之后移动
Console.ReadLine()

当前,应用程序正在等待enter键,然后启动计时器并立即存在

关于您编辑的帖子:

您正在使用
System.Windows.Forms
中的
计时器
,它不适用于控制台应用程序。尝试使用
系统中的计时器。计时器

  • 您需要在ReadLine()调用之前设置并启动计时器,否则代码将无法到达它

  • 应用程序线程需要处于单线程单元(STA)模式。将[StatThread]属性应用于该方法。 见:


  • 这是不明智的。剪贴板除了用于屏幕截图之外,还用于许多其他用途;你会让你的用户非常不高兴。你说的“它不工作”是什么意思?症状是什么?我编辑了代码(见问题)。但是它仍然不起作用。我尝试使用System.Timers。但是,它似乎不支持Tick方法。你知道怎么做吗?这是一门不同但又相似的课。这件事已经过去了。@alex谢谢你。我再次修改了代码(请参见问题)。但是,我得到了这个错误:ThreadStateException-在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。确保你的主函数上有STAThreadAttribute标记。哦,上帝,请停止更改原始问题:)所有答案看起来都很奇怪,因为它们会提示已经存在的更改。并按照jlew的建议,将[StatThread]属性放在main方法中。但是它仍然不起作用。谢谢你的回复。我编辑了代码,我认为有些东西起作用了。但是,我得到了以下错误:ThreadStateException-在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。确保主函数上标记了STAThreadAttribute。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Timers;
    using System.Windows.Forms;
    
    namespace PreventScreenshot
    {
        class Program
        {
            [STAThread]
            public static void Main(string[] args)
            {
                System.Timers.Timer timer1 = new System.Timers.Timer();
                timer1.Elapsed += new ElapsedEventHandler(timer_Tick);
                timer1.Interval = 1000;
                timer1.Enabled = true;
                timer1.Start();
    
                Console.WriteLine("---Prevent Screenshot from being taken---");
                Console.WriteLine();
                Console.WriteLine("DLL operation started.  Try to take a screenshot");
                Console.WriteLine();
                Console.WriteLine("Press enter to exit");
                Console.ReadLine();
            }
    
            public static void timer_Tick(object sender, EventArgs e)
            {
                Clipboard.Clear();
            }
        }
    }