private void GeneralSetup() { _settingsLock = new object(); _byteBufferLock = new object(); _stopThreads = false; _tasks = new ConcurrentQueue <FractalTask>(); _drawingTasks = new ConcurrentQueue <FractalTask>(); _previousDrawnTasks = new ConcurrentQueue <FractalTask>(); _pixelValues = new byte[PixelFormats.Bgra32.BitsPerPixel / 8 * _pixelWidth * _pixelHeight]; var mainThread = new Thread(MainThreadTask) { IsBackground = true, Name = this.Name + ": MandelbrotMainThread" }; _defaultColorMapper = new HsvColorMapper(); for (var i = 0; i < _numThreadsPerTaskQueue; i++) { var workerThread = new Thread(WorkerTask) { IsBackground = true, Name = this.Name + ": WorkerThread " + i }; var drawingThread = new Thread(DrawingWorkerTask) { IsBackground = true, Name = this.Name + ": DrawingThread " + i }; //Both kinds of Threads do both tasks. But drawing Threads prioritize drawing and normal workers prioritize calculation workerThread.Start(); drawingThread.Start(); } mainThread.Start(); }
private void comboBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { var s = (ComboBox)sender; Type t = _colorMappers[e.AddedItems[0].ToString()]; AbstractColorMapper c = (AbstractColorMapper)Activator.CreateInstance(t); _previewMandelbrot.SetColorMapper(c); _renderMandelbrot.SetColorMapper(c); _previewMandelbrot.ReColor(); }
public void SetColorMapper(AbstractColorMapper c) { _colorMapper = c; _colorMapper.redrawWanted += (sender, args) => { ReColor(); }; }