在IResourceChangeListener的上下文中,我需要修改工作区中给定的首选项文件。由于“请注意,在资源更改事件通知期间,可能会禁止对资源进行进一步更改”。执行此更改的唯一解决方案是将其延迟到未来事件(5秒钟后,下次访问要修改的文件时,在下一个选择事件等)。修改文件以响应IResourceChangeListener
我想知道你如何处理这种情况?
在IResourceChangeListener的上下文中,我需要修改工作区中给定的首选项文件。由于“请注意,在资源更改事件通知期间,可能会禁止对资源进行进一步更改”。执行此更改的唯一解决方案是将其延迟到未来事件(5秒钟后,下次访问要修改的文件时,在下一个选择事件等)。修改文件以响应IResourceChangeListener
我想知道你如何处理这种情况?
您可以使用Eclipse Jobs API及其调度规则。 IResource
实现了ISchedulingRule
,并且您可以使用它在您的资源更改侦听器中安排一个WorkspaceJob
,一旦资源上的锁定(在您的情况下,首选项文件)被删除。
禁止并行修改是非常合乎逻辑的。我认为这很正常。此外,允许/禁止并行修改是并发问题。因此,这个问题是关于隔离(ACID)。
要处理这种情况,我会做一些同步,睡眠,等待,通知或类似的文本书解决方法。简而言之,“锁定线程在完成时将通知等待的线程”。这是抽象的,但我相信你明白了。
没错。在你的监听器中启动一个WorkspaceJob,让Eclipse完成剩下的工作。 – zvikico 2010-08-27 14:32:53
@zvikico +1对于您在何处使用该工作的完美评论,我所说的方式有点不清楚。如果你不介意的话,我会在你的回复中加入你的评论。 – 2010-08-27 15:04:36