/// <summary> run the game. </summary>
        public virtual void Run()
        {
            // Create Referee
            _referee = CreateReferee(_numCards, _numPlayers, _seed);

            // Create Views
            for (int i = 0; i < _numPlayers; ++i) {
                CardGameViewWindow view = (CardGameViewWindow)CreateView(_numCards, _imageURI);
                _referee.Join(view);
                view.Show();
            }

            // run referee in background thread
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += new DoWorkEventHandler(delegate { _referee.Start(); });
            worker.RunWorkerAsync();

            // run event loop in this thread
            App app = new App();
            app.Run();
        }