Ejemplo n.º 1
0
        public static void TestObjectDisposedException()
        {
            IThreadWorker worker = Resolve.Portable.ThreadWorker(nameof(TestObjectDisposedException), new ProgressContext(), false);

            worker.WorkAsync = (ThreadWorkerEventArgs e) =>
            {
                e.Result = new FileOperationContext(String.Empty, ErrorStatus.Success);
                return(Task.FromResult <object>(null));
            };
            try
            {
                worker.Run();
                worker.Join();
            }
            finally
            {
                worker.Dispose();
            }

            bool hasCompleted = false;

            Assert.Throws <ObjectDisposedException>(() => { worker.Run(); });
            Assert.DoesNotThrow(() => { worker.Join(); });
            Assert.DoesNotThrow(() => { hasCompleted = worker.HasCompleted; });
            Assert.That(hasCompleted, "Even though the thread has completed, the variable should be set, since we allow calls to HasCompleted even after Dispose().");
            Assert.DoesNotThrow(() => { worker.Dispose(); });
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            ISingleConsumerQueue <TextFileContext> consumerQueue = new MonitorSingleConsumerQueue <TextFileContext>(new TextFileConsumer(FileName));
            IThreadWorker producerThread = new TextFileContextProducer(consumerQueue);
            IThreadWorker consumerThread = consumerQueue;

            try
            {
                consumerThread.Start();
                producerThread.Start();

                Console.WriteLine($"({Thread.CurrentThread.Name}): Модель запущена. Данные пишутся в {Path.Combine(Directory.GetCurrentDirectory(), FileName)}");
                Console.WriteLine($"({Thread.CurrentThread.Name}): Нажмите любую клавишу, чтобы остановить модель.");
                Console.ReadKey(true);
                Console.WriteLine($"({Thread.CurrentThread.Name}): Остановка модели...");
            }
            finally
            {
                producerThread.Dispose();
                consumerThread.Dispose();

                producerThread.Join();
                consumerThread.Join();

                Console.WriteLine($"({Thread.CurrentThread.Name}): Модель остановлена. Нажмите любую клавишу для выхода...");
                Console.ReadKey(true);
            }
        }
Ejemplo n.º 3
0
 public void Dispose()
 {
     _worker.Dispose();
 }