سؤال

ولقد اثنين من الوظائف التي أريد أن تعمل على المواضيع المختلفة (لأنهم الاشياء قاعدة البيانات، وانهم لا حاجة على الفور).

وظائف هي:

            getTenantReciept_UnitTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_Unit);
            getTenantReciept_TenantNameTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_TenantName);

في جافا سكريبت، وأنا أعلم أنني يمكن أن تخلق خلق وظيفة مجهولة المصدر والذي يطلق عليه في موضوع جديد بسهولة تامة مع شيء من هذا القبيل:

setTimeout(new function(){doSomethingImportantInBackground();}, 500);

هل هناك شيء من هذا القبيل في C #؟

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

المحلول

وسؤالك ليس واضحا جدا، وأنا خائف. يمكنك بسهولة بدء موضوع جديد مع بعض الرموز، وذلك باستخدام وسائل مجهولة في C # 2، وتعبيرات لامدا في C # 3:

وطريقة مجهول:

new Thread(delegate() {
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit);
}).Start();
new Thread(delegate() {
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName);
}).Start();

وامدا التعبير:

new Thread(() =>
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit)
).Start();
new Thread(() =>
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName)
).Start();

ويمكنك استخدام نفس النوع من بناء الجملة من أجل Control.Invoke، لكنها اصعب قليلا كما يمكن أن تأخذ <م> أي مندوب - لذلك كنت بحاجة لنقول للمترجم أي نوع كنت تستخدم بدلا من الاعتماد على التحويل الضمني. من المحتمل أن يكون أسهل في الكتابة:

EventHandler eh = delegate
{
    // Code
};
control.Invoke(eh);

أو

EventHandler eh = (sender, args) =>
{
    // Code
};
control.Invoke(eh);

وكملاحظة جانبية، هي أسمائكم حقا كل هذا الوقت؟ يمكنك تقصير منهم للحصول على رمز أكثر قابلية للقراءة؟

نصائح أخرى

وعلى غرار ما قيل - أجد المهام لتكون أكثر بساطة قليلا (بدعم اعتبارا من <لأ href = "https://msdn.microsoft.com/en-us/library/system.threading.tasks.task" > صافي 4 ، ويمكن استخدامها على النحو التالي اعتبارا من <لأ href = "https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.100 ) "> صافي 4.5 ):.

Task mytask = Task.Run(() => 
{
    //Lines of code
});

وابتداء من المواضيع غير مكلفة نسبيا.

وأنت قد يكون من الأفضل استخدام خيط من التجمع موضوع:

ThreadPool.QueueUserWorkItem(unused =>
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit)
);
ThreadPool.QueueUserWorkItem(unused =>
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName)
);

هل يمكن استخدام أسلوب مجهول:


void Foo()
{
    Thread myThread = new System.Threading.Thread(delegate(){
              //Your code here
     });
    myThread.Start();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top