1

该应用程序是一个桌面文档管理系统。(扫描文档的)图像文件存储在共享网络文件夹中,其索引存储在数据库中。现在,当显示所选文档页面的图像时,用户可以选择删除它(通过上下文菜单)。问题是,如果我尝试这样做,那么它会抛出一个异常(资源被锁定),鉴于它正在屏幕上显示,它具有所有意义。所以,目前我维护一个持久删除队列。应用程序启动后,我进入队列并删除其索引已从数据库中删除的文档的页面,并且鉴于它们未显示删除成功,但这似乎是非常糟糕的代码(我的意思是它有效,但不是我猜应该尽可能干净)。

我的快速解决方案有多糟糕。鉴于该应用是单用户应用,因此用户需要为该应用加注星标才能使用它。这是一个非常糟糕的主意还是我可以使用其他路径来实现。

通过将图像绑定到当前文件来显示图像(在文档查看器中):

看法:

<Image Name="PageViewedPath" Margin="20" Grid.Column="0" />

视图模型:

public string PageViewedPath { get; set; }

一旦用户单击下一个或上一个,我就会更改(在 ViewModel 中的 PageViewedPath)。也许问题是我无法详细控制的绑定,我使用的是 Caliburn Micro,所以这就是为什么只需设置图像名称即可完成绑定。

我认为也许覆盖此绑定并在显示之前创建图像的硬拷贝必须有效,但我不确定它是否会,更糟糕的是,如何做到这一点。

4

2 回答 2

1

在我开发的使用图像池的应用程序中,我遇到了类似的问题。虽然图像不再显示,但文件已被锁定,无法删除。

我通过加载图像解决了我的问题BitmapCacheOption.OnLoad,如下所示:

Image myImage = new Image();
BitmapImage bi = new BitmapImage();
bi.BeginInit();

bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = imageUri;

// End initialization.
bi.EndInit();
myImage.Source = bi;

这是一个 msdn 帖子的链接,该帖子显示了如何使用 xaml 中的 BitmapCacheOption:

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3cb97997-941f-42a8-a03b-f84b152c1139/

于 2012-06-22T18:24:09.500 回答
0

如果您使用自己的代码对文件进行代码锁定 - 停止锁定。您可能在加载图像的某个地方错过了一些using/调用。Dispose

如果它不是您的代码,或者您需要处理由于使用共享文件位置而导致的故障 - 您的解决方案可能没问题。大多数用户也不会期望这种行为 - 我的正常期望是文件被立即删除或永远不会删除。

于 2012-06-22T18:03:43.470 回答