public void TestRun() { var threadManager = (IThreadManager) new ThreadManager(); var threadBundle = new ThreadBundle(); var thread = threadManager.CreateNewThread(threadBundle, this, this.GetType().GetMethod("Test")); thread.Start(); thread.Join(); }
public void Run() { // Runs a thread in the background to monitor threads and join them to monitor thread var threadManager = (IThreadManager) new ThreadManager(); var crimeImportService = (ICrimeImportService) new CrimeImportService(); // Get list of files in directories var testFiles = crimeImportService.GetAllFileNames("..\\..\\test_data"); var trainingFiles = crimeImportService.GetAllFileNames("..\\..\\training_data"); for (var i = 0; i < 4; ++i) { // Setup a thread to load test crime data from csv to database var bundle1 = new ThreadBundle { FilePaths = testFiles.Skip(i*(int)Math.Ceiling((double)(testFiles.Count/4))) .Take((int)Math.Ceiling((double)(testFiles.Count / 4))) .ToList(), Option = 0, TestCrimeService = new Instantiator().GetNewTestCrimeService(ConnectionString, null) }; var thread1 = threadManager.CreateNewThread(bundle1, crimeImportService, crimeImportService.GetType().GetMethod("PopulateDatabase")); // Setup a thread to load training crime data from csv to database var bundle2 = new ThreadBundle { FilePaths = trainingFiles.Skip(i * (int)Math.Ceiling((double)(trainingFiles.Count / 4))) .Take((int)Math.Ceiling((double)(trainingFiles.Count / 4))) .ToList(), Option = 1, TrainingCrimeService = new Instantiator().GetTrainingCrimeService(ConnectionString, null) }; var thread2 = threadManager.CreateNewThread(bundle2, crimeImportService, crimeImportService.GetType().GetMethod("PopulateDatabase")); // Start threads and add to monitor thread1.Start(); thread2.Start(); threadManager.WatchThread(thread1); threadManager.WatchThread(thread2); } threadManager.JoinAll(); }
public void Test(ThreadBundle bundle) { Console.WriteLine("Successful method call"); }
public Thread CreateNewThread(ThreadBundle bundle, object o, MethodInfo method) { // Invoke passed method on separate thread return new Thread(() => method.Invoke(o, BindingFlags.InvokeMethod, null, new []{bundle}, CultureInfo.DefaultThreadCurrentCulture)); }