हमारी टीम एक पुराने भर्ती के लिए एक नई भर्ती वर्कफ़्लो प्रणाली बना रही है। मुझे पुराने डेटा को नए स्कीमा में माइग्रेट करने का काम सौंपा गया है। मैंने एक छोटा विंडोज फॉर्म प्रोजेक्ट बनाकर ऐसा करने का फैसला किया है क्योंकि स्कीमा मूल रूप से अलग है और सीधे टीएसक्यूएल स्क्रिप्ट पर्याप्त समाधान नहीं हैं।
मुख्य मुहरबंद वर्ग 'आयात नियंत्रक' जो काम करता है, निम्नलिखित प्रतिनिधि कार्यक्रम घोषित करता है:
public delegate void ImportProgressEventHandler(object sender, ImportProgressEventArgs e);
public static event ImportProgressEventHandler importProgressEvent;
मुख्य विंडो एक नए धागे का उपयोग कर उस वर्ग में एक स्थिर विधि शुरू करता है:
Thread dataProcessingThread = new Thread(new ParameterizedThreadStart(ImportController.ImportData));
dataProcessingThread.Name = "Data Importer: Data Processing Thread";
dataProcessingThread.Start(settings);
ImportProgressEvent args में एक स्ट्रिंग संदेश होता है, प्रगति पट्टी के लिए अधिकतम int मान और वर्तमान प्रगति int मान होता है। विंडोज फॉर्म घटना के लिए सदस्यता देता है:
ImportController.importProgressEvent += new ImportController.ImportProgressEventHandler(ImportController_importProgressEvent);
और अपने स्वयं के प्रतिनिधि का उपयोग करके इस तरीके से इस घटना का जवाब देता है:
private delegate void TaskCompletedUIDelegate(string completedTask, int currentProgress, int progressMax);
private void ImportController_importProgressEvent(object sender, ImportProgressEventArgs e)
{
this.Invoke(new TaskCompletedUIDelegate(this.DisplayCompletedTask), e.CompletedTask, e.CurrentProgress, e.ProgressMax);
}
अंत में प्रगति पट्टी और सूची बॉक्स अद्यतन हैं:
private void DisplayCompletedTask(string completedTask, int currentProgress, int progressMax)
{
string[] items = completedTask.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
foreach (string item in items)
{
this.lstTasks.Items.Add(item);
}
if (currentProgress >= 0 && progressMax > 0 && currentProgress <= progressMax)
{
this.ImportProgressBar.Maximum = progressMax;
this.ImportProgressBar.Value = currentProgress;
}
}
बात यह है कि ListBox बहुत जल्दी अपडेट हो रहा है, लेकिन प्रगति पट्टी कभी नहीं चलता है जब तक कि बैच लगभग पूरी तरह से पूरा नहीं हो जाता ??? क्या देता है ?