等待剪贴板文本更改(错误)
|
我正尝试检测每次剪贴板数据更改。因此,我设置了一个计时器并使它连续检查
Clipboard.GetText()
的变化。
我正在使用以下代码:
public void WaitForNewClipboardData()
{
//This is in WPF, Timer comes from System.Timers
Timer timer = new Timer(100);
timer.Elapsed += new ElapsedEventHandler(
delegate(object a, ElapsedEventArgs b){
if (Clipboard.GetText() != ClipBoardData)
{
SelectedText.Text = Clipboard.GetText();
ClipBoardData = Clipboard.GetText();
timer.Stop();
}
});
timer.Start();
}
运行时出现以下错误:
必须先将当前线程设置为单线程单元(STA)模式,然后才能进行OLE调用。
有人知道为什么吗?
没有找到相关结果
已邀请:
5 个回复
缮淳彼誊
因此,基本上,当您使用不同的线程(即计时器等)时,您需要记住原始的启动线程是特殊的(假设它是STA线程)。为了在属于该特殊线程的对象上调用方法,您需要经过SynchronizationContext,我已将其作为App类的静态成员提供。 您可能还想考虑使用一个实际分派到主UI线程的计时器,那么您就不必再费心自己将其发布到SynchronizationContext了。
徐百晴墓斜
哭木算
然后是将进行实际更改的方法:
然后,我在线程进程中调用此方法(在您的情况下为timer事件):
这是在WinForms中。早在我第一次知道更改UI线程以外的线程上的控件属性会导致问题时,就回到了当初。很抱歉,如果这个距离与您尝试的距离还很近。
硕歌沙
坝硷操