توفير دفق XML في C# يقول أنه قيد الاستخدام بواسطة عملية أخرى

StackOverflow https://stackoverflow.com/questions/849558

  •  21-08-2019
  •  | 
  •  

سؤال

لدي هذا مفتوحة المصدر مكتبة لدي بعض المشاكل إصلاح مشكلة...هذه المكتبة تسمح بسهولة إنشاء ملف XML لتخزين إعدادات التطبيق.ولكن أواجه مشكلة حفظ التغييرات.

يجب تطبيق آخر حيث أنا باستخدام هذه المكتبة و في كل مرة نافذة التطبيق يتم تغيير حجم ، حفظ() الأسلوب من المكتبة إلى توفير حجم النافذة/موقف إلى ملف XML.

أكثر من مرة أنه يعمل بشكل جيد, يتم حفظ كل شيء.مرة واحدة في حين على الرغم من أنني الحصول على استثناء من قوله الملف قيد الاستخدام من قبل عملية أخرى.

أنا حقا بحاجة للتأكد من أن يتم حفظ التغييرات في كل مرة حفظ() وتسمى طريقة, أنا بحاجة إلى التعامل مع هذا الاستثناء بطريقة ما أو منع ذلك من الحدوث.

ما هي يا رفاق اقتراحات أفضل التعامل مع هذا الوضع ؟

قانون حفظ() الطريقة التالية:

public void Save() {
    // Create a new XML file if there's no root element
    if(xDocument.DocumentElement == null) {
        xDocument = new XmlDocument();
        xDocument.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
            "<" + XmlRootElement + ">\n</" + XmlRootElement + ">");
    }

    // OMITTED CODE WAS HERE (NOT IMPORTANT FOR THE PROBLEM)

    // Create a new XML writer for the XML file
    XmlWriter xWriter = XmlWriter.Create(XmlFilePath, new XmlWriterSettings() {
        Indent = true,
        IndentChars = "\t"
    });

    // Sort the XML file using the XSL sylesheet and save it
    xslTransform.Transform(xDocument, xWriter);

    // Clear the buffer and close the XML writer stream
    xWriter.Flush();
    xWriter.Close();
}
هل كانت مفيدة؟

المحلول

ويمكن أن يكون عليه الحال أن أحداث تغيير حجم نافذة الانتهاء يطلقون النار بسرعة، أن وظيفة حفظ يطلق عليه اسم، ودعا مرة أخرى قبل أن ينتهي تشغيل أول مرة. هذا من شأنه أن يؤدي إلى الخطأ الذي يصف (عملية أخرى باستخدام ملف هي ... YOU!). حاول المحيطة التعليمات البرمجية مع قفل، thusly :

lock(some_shared_object)
{
    //Your code here
}

نصائح أخرى

وXmlWriter هو IDisposable. يجب أن التفاف عليه في البند باستخدام (). http://msdn.microsoft.com/en-us/ مكتبة / system.xml.xmlwriter.aspx

يجب أن أذهب مع مجموعة من الإجابات بالفعل هنا.

الخاص بك XmlWriter ينبغي في استخدام كتلة لعدة أسباب.يجب أن تتخلص من ذلك أن يتم تحرير الموارد في أقرب وقت ممكن.أيضا ما إذا كنت رمي استثناء أثناء التفاعل معها.الملف لن تكون مغلقة بشكل صحيح ، على الأقل حتى finalizer في ركلات و يحرر الموارد الخاصة بك.

حتى مع استخدام البيان "قد" يكون الخلاف على الملف تحتاج إلى مكان حفظ التعليمات البرمجية في بيان القفل.الأسلوب هو عدم عودة الدخول بطبيعتها لأن الملف هو مورد مشترك.وضع قفل حوله قد تكون على قتل إذا لم يكن لديك مواضيع متعددة ، ولكن يمكنك أن تضمن لك بشكل صحيح التحكم في الوصول إلى الملف.

شيء آخر للنظر هو أن كنت قد ترغب في تحريك عملية إنقاذ إلى مؤشر ترابط خلفية كتابة الملف.إذا كنت تحصل على عدد كبير من إعدادات الملف قد يسبب غريب واجهة المستخدم التفاعلات لأن كنت في انتظار الملف إلى كتابة كل الوقت المستخدم تغيير حجم و هذا يحدث على UI.إذا كنت فعلت هذا أنت بالتأكيد بحاجة إلى تأمين الوصول إلى ملف المورد.

وأيضا قد حاول باستخدام عبارة القفل. يمكن أن يكون ذلك من الأساليب التي تجتاح بعضها البعض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top