我有这个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
}
}
在window4(splash)中
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++;
}
}
}
希望有人可以帮助我。
感谢名单!
答案 0 :(得分:0)
不要试图在你的MainWindow中显示启动..正确的方法是你应该尝试创建一个没有边框而没有调整大小的窗口并保持在顶部..然后在app.cs中调用window.show()
这是一篇定义如何做到这一点的文章。
http://romenlaw.blogspot.com/2008/07/wpf-splash-with-progressbar.html
编辑:
您可以订阅backgroundworker的progresschange事件。只要从DoWork eventHandler
调用worker.ReportProgress()方法,就会触发此操作worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
此行将在InitOperation类中的这些行之后添加。
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork+=new DoWorkEventHandler(worker_DoWork);
在DoWork的事件处理程序中,您可以使用
worker.ReportProgress(100);
在worker_ProgressChanged事件处理程序中,您可以更改栏的进度。
此致