मैं एक आवेदन है कि InvokeMember()
तो जैसे के साथ अपने DLL का आह्वान किया है:सी # को मार डालो सभी धागे
Assembly OCA = Assembly.LoadFrom("./Modules/ProcessFiles.dll");
Type[] types = OCA.GetTypes();
foreach (var type in types)
{
//MethodInfo[] methods = type.GetMethods();
if (type.Name == "Converter")
{
var tmpType = type;
var obj = Activator.CreateInstance(tmpType);
Thread t = new Thread(
() =>
tmpType.InvokeMember("Run", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj,
null));
t.Start();
break;
}
}
मेरे DLL फिर नए एक धागा बनाता है और प्रसंस्करण शुरू होता है। मेरे डीएलएल में, मैं इस तरह का नया धागा बना देता हूं:
Thread thread = new Thread(
delegate(){
while(true)
{
GetFilesInFolder();
Thread.Sleep(120000);
}
});
ne.Start();
लक्ष्य समय-समय पर फ़ोल्डर की जांच करना है। समस्या यह है कि जब मैं अपने डीएलएल को आमंत्रित करने वाले एप्लिकेशन को बंद करता हूं, तो प्रक्रिया बंद नहीं होती है। क्या सभी धागे को बंद करने का कोई तरीका है?
एनबी: मैं एप्लिकेशन को संशोधित नहीं कर सकता, मैं केवल अपने डीएलएल को संशोधित कर सकता हूं।
मैं टाइमर का उपयोग करने की कोशिश की थी, लेकिन मैं Threading.Timer काम करना आरंभ कर सके सुरक्षित रद्द लागू करने के बारे। – hs2d
टाइमर भी हैं। टाइमर –
हां, मुझे इसके बारे में पता है। हो सकता है कि आप मुझे एक कामकाजी उदाहरण दे सकें कि मेरी स्थिति में टाइमर का उपयोग कैसे करें? – hs2d