如何检测文件是用Silverlight saveDialog为C#打开的?

时间:2011-10-25 14:40:30

标签: c# silverlight savefiledialog

如果某个文件是由另一个应用程序打开的,然后我尝试通过Silverlight SaveDialog保存它,我可以通过异常捕获错误,但之后我收到此错误。

行:57 错误:Silverlight应用程序中的未处理错误 代码:4004
类别:ManagedRuntimeError
消息:System.InvalidOperationException:此操作只能在UI线程上发生。    在System.Windows.Hosting.NativeHost.VerifyThread()    在System.Windows.SaveFileStream.Dispose(布尔处理)    在System.IO.FileStream.Finalize()

我更愿意检测到该文件是打开的,但似乎无法做到这一点。我尝试了fs.CanWrite,但它返回true,即使文件是由另一个应用程序打开的。

编辑:Here是Silverlight论坛上的一篇文章,似乎可以解释发生的事情,尽管他们认为这只是Office文件。我遇到了PDF文件的问题。

这是我的代码:

    public void PDFSaveFile(bool success)
    {
        // silverlight requires saveFileDialog to be user-initiated, 
        // so this is called from the OK button of a pop-up window
        // ignore success, we only gave an OK option
        byte[] fileBytes = doc.ToPDF().ToArray();
        PDFClose();

        try
        {
            SaveFileDialog saveFileDlg = new SaveFileDialog();
            saveFileDlg.Filter = "PDF files (*.pdf)|*.pdf";
            bool? dialogResult = saveFileDlg.ShowDialog();
            if (dialogResult == true)
            {
                using (var fs = saveFileDlg.OpenFile())
                {
                    fs.Write(fileBytes, 0, fileBytes.Length);
                    fs.Close();
                }
            }
        }
        catch (Exception ex)
        {
            Log.HandleInternalError(string.Format("Unable to save file: {0}",ex.Message));
        }
    }

1 个答案:

答案 0 :(得分:2)

你可以使用 FileInfo.Open 如果返回IOException =文件已经打开

FileInfo.Open