سؤال

أتلقى هذا التحذير من FxCop:

"يحتوي 'RestartForm' على الحقل 'RestartForm.done' من النوع IDisposable:"حدث إعادة الضبط اليدوي".قم بتغيير أسلوب التخلص في 'RestartForm' لاستدعاء Dispose أو Close في هذا الحقل."

حسنًا، أفهم ما يعنيه هذا ولماذا هذا ما يجب القيام به...يستثني System.Windows.Forms.Form لا يسمح لك بالتجاوز أيضًا .Close() أو .Dispose(), ، اذا مالعمل؟حاليًا أعمل مع هذا الحل:

    private void RestartForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        done.Set();
        done.Close();
    }

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

هل كانت مفيدة؟

المحلول

وتحتاج إلى تجاوز أسلوب Dispose من Form

وعادة هذا يتم تجاوز تلقائيا في ملف RestartForm.Designer.cs، لذلك سوف تحتاج إلى نقل التصرف في ملف التعليمات البرمجية بحيث يمكنك إضافة أيا كان رمز تحتاج إلى إضافة دون أن يتم إعادة كتابة من قبل المصمم.

في لRestartForm.cs

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    if (components != null)
    {
      components.Dispose();
    }

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

نصائح أخرى

وأنا استخدم هذا الأسلوب:)

            Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage);
            currentButton.Image = bgImage;
            currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose();

إذا يمتد RestartForm System.Windows.Forms.Form، يجب أن تكون قادرا على تجاوز تخلص (منطقي يتخلصون). يجب تنفيذ بشكل صحيح هذا لصفك "RestartForm" للتخلص من IDisposables الخاص بك.

وينبغي أن تبدو مثل:

public override Dispose(bool disposing)
{
   if (disposing)
   {
       // Dispose was called from user code. Dispose of managed resources here.
       done.Dispose();
   }

   // Dispose of unmanaged resources here, and invoke base dispose.
   base.Dispose(disposing);
}

تحتاج إلى تجاوز طريقة التخلص، هذه الطريقة يأتي من التحكم الطبقة الأساسية

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top