private void BackgroundStardistWorkerThread()
        {
            while (!PendingClose)
            {
                int wh = WaitHandle.WaitAny(new WaitHandle[] { closeRequested, stardistRequested });

                if (PendingClose)
                {
                    break;
                }

                StardistRequest stardistreq = null;

                switch (wh)
                {
                case 0:      // Close Requested
                    break;

                case 1:      // Star Distances Requested
                    while (!PendingClose && closestsystem_queue.TryDequeue(out stardistreq))
                    {
                        if (!stardistreq.IgnoreOnDuplicate || closestsystem_queue.Count == 0)
                        {
                            StardistRequest req = stardistreq;
                            ISystem         sys = req.System;
                            SortedList <double, ISystem> closestsystemlist = new SortedList <double, ISystem>(new DuplicateKeyComparer <double>());  //lovely list allowing duplicate keys - can only iterate in it.
                            SystemClassDB.GetSystemSqDistancesFrom(closestsystemlist, sys.x, sys.y, sys.z, 50, true, 1000);
                            if (!PendingClose)
                            {
                                InvokeAsyncOnUiThread(() =>
                                {
                                    history.CalculateSqDistances(closestsystemlist, sys.x, sys.y, sys.z, 50, true);
                                    req.Callback(sys, closestsystemlist);
                                });
                            }
                        }
                    }

                    break;
                }
            }
        }