我已經構建了一個在WPF中運行的數字標牌解決方案。我有一個可執行文件,負責處理調度和一些外部程序集(用戶控件的.dll),負責顯示圖像,視頻等。爲什麼我的圖片被另一個進程鎖定?
當應用程序啓動時,它將所有程序集加載到列表中,然後使用與配置信息的XML文件上哪種幻燈片的開始與參數,像這樣:
<signage>
<slide type="image" argument="c:\image1.png"/>
<slide type="image" argument="c:\image2.png"/>
<slide type="video" argument="c:\video1.mpg"/>
...
</signage>
該列表可能會很長,幷包含許多不同的幻燈片。當我建立我的對象列表來顯示我創建一個新的實例,通過反射,我需要顯示的.dll,傳遞它的參數。這包含在一個列表中。父可執行程序然後遍歷列表並在我的主WPF應用程序上顯示用戶控件實例(實例化的幻燈片類型)。
那就是我的問題的背景。
當我需要在運行時更新內容時,我需要替換磁盤上的文件(image1,image2等),但得到一個異常,該文件正在被另一個進程使用,並且我無法訪問它們。
關於如何解決這個問題的任何想法?有什麼辦法可以從我的應用程序中「卸載」它們嗎?有沒有辦法以適當的方式做到這一點?
編輯 這裏是我如何做到這一點的圖像組件一些額外的信息:
public ImageExtensionControl(XmlDocument document, Dictionary<string, string> settings, Action slideFinished)
{
InitializeComponent();
string path = new FileInfo(Assembly.GetCallingAssembly().Location).Directory.FullName;
string id = settings["Image"];
path = System.IO.Path.Combine(path, document.SelectSingleNode("properties/files/file[@id='" + id + "']").Attributes["path"].Value);
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri(path, UriKind.Absolute);
bitmapImage.EndInit();
this.myimage.Source = bitmapImage;
}
不言自明的:也許他們都與Windows圖片查看器,你的應用程序的另一個副本開放,或者你不關閉使用它的流。如果他們剛剛寫信,它可能是防病毒/安全軟件將其打開。如果有人通過網絡共享打開相同的消息也適用。 – 2013-04-29 17:54:30