в школе мне дали задание создать простое приложение, чтобы показать, как работают приоритеты потоков. Проблема в том, что потоки, которые я запускаю, не придерживаются установленных приоритетов и заканчиваются случайным образом (или это выглядит так).
Вот код для моего главного окна:
namespace ThreadsShowtime
{
public partial class MainWindow : Window
{
private SuperThread _lowest;
private SuperThread _below;
private SuperThread _normal;
private SuperThread _above;
private SuperThread _highest;
public MainWindow()
{
InitializeComponent();
}
private void ButtonClick(object sender, RoutedEventArgs e)
{
_lowest = new SuperThread(ThreadPriority.Lowest, elipseLowest, Dispatcher, lowestLbl);
_below = new SuperThread(ThreadPriority.BelowNormal, elipseBelow, Dispatcher, belowLbl);
_normal = new SuperThread(ThreadPriority.Normal, elipseNormal, Dispatcher, normalLbl);
_above = new SuperThread(ThreadPriority.AboveNormal, elipseAbove, Dispatcher, aboveLbl);
_highest = new SuperThread(ThreadPriority.Highest, elipseHighest, Dispatcher, highestLbl);
_lowest.Start();
_below.Start();
_normal.Start();
_above.Start();
_highest.Start();
}
}
}
И код класса SuperThread:
namespace ThreadsShowtime
{
public class SuperThread
{
private readonly Stopwatch _stopwatch;
public readonly Thread Thread;
public SuperThread(ThreadPriority thp, Shape sh, Dispatcher dispatcher, ContentControl lbl)
{
Thread = new Thread(() => DummyMethod(dispatcher, sh, lbl)) {Priority = thp};
_stopwatch = new Stopwatch();
}
public long Elapsed { get; private set; }
public double ElapsedSeconds => Elapsed / 1000.0;
private void DummyMethod(Dispatcher dispatcher, Shape sh, ContentControl lbl)
{
_stopwatch.Start();
dispatcher.Invoke(() =>
{
sh.Fill = Brushes.GreenYellow;
}, DispatcherPriority.Normal);
for (var idx = 0; idx < 30000; idx++) Console.WriteLine(idx);
dispatcher.Invoke(() =>
{
sh.Fill = Brushes.OrangeRed;
}, DispatcherPriority.Normal);
_stopwatch.Stop();
Elapsed = _stopwatch.ElapsedMilliseconds;
dispatcher.Invoke(() =>
{
lbl.Content = ElapsedSeconds;
}, DispatcherPriority.ContextIdle);
}
public void Start()
{
Thread.Start();
}
}
}
Вывод этого приложения выглядит так:

Почему это происходит?
Большое спасибо за любую предоставленную помощь.