Главное окно за папкой, также с помощью заставки - PullRequest
1 голос
/ 10 января 2012

Я получил это приложение WPF, и здесь я сделал Splashscreen (окно wfp) с панелью процессов на нем. (сейчас я просто позволю ему работать с таймером, чтобы изменить это позже)

пока что, кажется, все это работает довольно хорошо.

но происходит следующее: - Я запускаю сборку из папки (../bin/release/) - Splash теперь появляется на экране, и панель процессов начинает работать. - при полном баре запускается основное приложение (MainWindow) но это главное окно теперь не запускается сверху, оно находится за папкой, из которой был выполнен exe (в данном случае ../release/)

Я искал вокруг, но не совсем понимаю, как использовать фрагменты, которые я нахожу в Интернете, и не думаю, что это правильное решение. скорее используйте достойное исправление, а затем обходной путь (если возможно)

Итак, почему это происходит, и как я могу изменить это поведение для правильной работы? (так, чтобы после всплеска главное отображалось поверх (непостоянно)?)

некоторые части кода: в основном

using ........
//etc etc...

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        //creating the exitmessage for use later on, after all, we want to use this in an other method.
        string exitmessage = null;



        public MainWindow()
        {
            //start new thread and use that for splashscreen.
            Thread t = new Thread(new ThreadStart(SplashScreen));
            t.SetApartmentState(ApartmentState.STA);
            t.Start();
            Thread.Sleep(5000);
            //start mainwindow
            InitializeComponent();
            //end splash proc.
            t.Abort();

           //region //check lang

        }

        public void SplashScreen()
        {
            WpfApplication1.Window4 X = new WpfApplication1.Window4();
            X.ShowDialog();
        }

        // region //etc.. app stuff

    }
}

в окне 4 (всплеск)

using .....
//etc.. etc...

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for Window4.xaml
    /// </summary>
    public partial class Window4 : Window
    {

        System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();


        public Window4()
        {
            InitializeComponent();
            Timer1();
        }

        public void Timer1()
        {
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0,0,0,0,25);
            dispatcherTimer.Start();   
        }

        private void dispatcherTimer_Tick(object sender, EventArgs e) 
        {
            if (progressBar1.Value == 100)
                dispatcherTimer.Stop();
            else
                progressBar1.Value++;
        }

    }

}

Надеюсь, кто-нибудь может помочь мне здесь. спасибо!

1 Ответ

0 голосов
/ 10 января 2012

не пытайтесь отображать всплеск в вашем MainWindow .. правильный способ заключается в том, что вы должны попытаться создать окно, не имеющее границ и не изменяющее размер, и остаться на вершине ... и затем вызвать это window.show () в app.cs

вот статья, определяющая, как вы можете это сделать ..

http://romenlaw.blogspot.com/2008/07/wpf-splash-with-progressbar.html

РЕДАКТИРОВАТЬ:

вы можете подписаться на событие progresschange фонового работника.он будет запускаться всякий раз, когда вы вызываете метод worker.ReportProgress () из DoWork eventHandler

worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);

эта строка будет добавлена ​​после этих строк в классе InitOperation.

BackgroundWorker worker = new BackgroundWorker();
worker.DoWork+=new DoWorkEventHandler(worker_DoWork);

и в обработчике событиядля DoWork вы можете использовать

worker.ReportProgress(100);

, в обработчике события worker_ProgressChanged вы можете изменять прогресс панели.

С уважением

...