我有一个在ReportViewer控件中显示为Tree层次结构的报表名称列表。当用户单击报表名称时,会加载输入表单,用户输入一些值并按“确定”。此时,Splash屏幕应在后端进程发生时加载(连接到DB,检索值等)。在Reportviewer编辑器中加载报表后,应该关闭启动画面。
到目前为止,我能够显示启动画面,但是当时它被卡住了,实际的报告没有加载,并且启动画面永远保持不变。
是否可以在应用程序中使用splashscreen,而不是在应用程序启动时使用?如果是,我该如何继续加载报告?
static class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new SnapPlusReports());
//new SplashScreenApp().Run(args);
}
}
public class SplashScreenApp : WindowsFormsApplicationBase
{
private static SplashScreenApp _application;
public static void Run(Form form)
{
_application = new SplashScreenApp { MainForm = form };
_application.Run(Environment.GetCommandLineArgs());
}
protected override void OnCreateSplashScreen()
{
this.SplashScreen = new ShowProgress();
base.OnCreateSplashScreen();
}
}
答案 0 :(得分:0)
之前我已经通过在运行时使用代码动态创建新表单来完成此操作。确保将所有选项设置为up,尤其是FormBorderStyle为none,或类似的设置,以便用户无法关闭它。然后,只需操作显示在该表单上的标签,并在处理完成后最终将其关闭。 这样您就不必担心线程,并且一个好的副作用是初始表单不可点击。
例如,我有一个在运行时弹出的表单(授予我不会改变它的任何内容,但想法就在那里:
AboutForm aboutForm = new AboutForm();
aboutForm.StartPosition = FormStartPosition.CenterParent;
Label lblAbout = new Label();
Version applicationVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
lblAbout.Text = applicationVersion.ToString();
lblAbout.Location = new Point(145,104);
aboutForm.Controls.Add(lblAbout);
aboutForm.ShowDialog();
这显示当前程序的版本号等。表单上已经存在其他标签(我先在视觉上创建它,然后调用它的实例)。
希望这有帮助!
答案 1 :(得分:0)
...如果您在指定时间内只需要一份应用程序副本,请抓住其他实例并优雅退出
static void Main()
{
Application.EnableVisualStyles();
bool exclusive;
System.Threading.Mutex appMutex = new System.Threading.Mutex(true, "MY_APP", out exclusive);
if (!exclusive)
{
MessageBox.Show("Another instance of xxxx xxxBuilder is already running.","MY_APP",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation );
return;
}
Application.SetCompatibleTextRenderingDefault(false);
xxxWindowsApplication.InitializeApplication();
Application.Run(new frmMenuBuilderMain());
GC.KeepAlive(appMutex);
}
在主表单加载中,您可以执行以下操作:
private void frmMenuBuilderMain_Load(object sender, EventArgs e)
{
//Show Splash with timeout Here--
if(!SystemLogin.PerformLogin())
{
this.Close();
return;
}
tmrLoad.Enabled = true;
}