سؤال

ولدي # برنامج C يستخدم فئة من التجميع آخر، وهذه الفئة يستدعي DLL غير المدارة للقيام ببعض المعالجة. هنا عبارة عن مقتطف:

public class Util
{
    const string dllName = "unmanaged.dll";
    [DllImport(dllName, EntryPoint = "ExFunc")]
    unsafe static extern bool ExFunc(StringBuilder path, uint field);

    public bool Func(string path, uint field)
    {
        return ExFunc(new StringBuilder(path), field);
    }

    ...
}

Util util = new Util();
bool val = util.Func("/path/to/something/", 1);

والمشكلة أواجه هو أنه إذا أدعو سوف "وظائفها" اهتمامي الرئيسي C # البرنامج لا يفرغ. عندما أدعو إغلاق () داخل النموذج الرئيسي بلدي عملية سيظل هناك إذا نظرت في إدارة المهام. إذا قمت بإزالة الدعوة إلى "وظائفها" برنامج افرغت ما يرام. وقد فعلت بعض التجارب والبرامج وظيفة الرئيسية بالتأكيد يعود ذلك لست متأكدا ما الذي يحدث هنا.

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

المحلول

هل لديك شفرة المصدر لunmanaged.dll؟ لا بد من فعل شيء ما، إما بدءا موضوع آخر، وليس الخروج، أو حظر في انها DllMain، وما إلى ذلك.

نصائح أخرى

ويبدو المكتبة غير المدارة الخاص بك هو وضع البيض في موضوع معالجة غير متزامن.

والاحتمالات هي أنه يدعم إلغاء وظيفة من نوع ما. أقترح عليك أن تحاول نسمي ذلك عند إيقاف تشغيل البرنامج. إذا كان البرنامج هو مجرد استكمال قبل حدوث الدعوة متزامنة لاستكمال، والبحث عن وظيفة "انتظار الانتهاء"، وندعو أنه قبل عودته من من طريقة "وظائفها".

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

وانها على الارجح أقل ثم مثالية، ولكن إذا كنت في حاجة الى الحل ربما يمكن استخدام:

System.Diagnostics.Process.GetCurrentProcess().Kill();

وهذا سوف ينتهي التطبيق على مستوى العملية وقتل جميع المواضيع التي أنتجت خلال هذه العملية.

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