C# 运行多个应用程序时出现问题-System.InvalidOperationException
我目前正在开发一个windows窗体应用程序,我有一个小问题,完全阻碍了我 我的问题是: 在program.cs文件中,我执行了第一个表单,该表单允许我检查此人是否与Internet连接良好。验证完成后,我想关闭此表单并打开我的应用程序,我尝试了C# 运行多个应用程序时出现问题-System.InvalidOperationException,c#,winforms,C#,Winforms,我目前正在开发一个windows窗体应用程序,我有一个小问题,完全阻碍了我 我的问题是: 在program.cs文件中,我执行了第一个表单,该表单允许我检查此人是否与Internet连接良好。验证完成后,我想关闭此表单并打开我的应用程序,我尝试了application.Run(new App()),但它告诉我不能在一个线程中执行两次启动 // program.cs using System; using System.Windows.Forms; using System.Net; using
application.Run(new App())代码>,但它告诉我不能在一个线程中执行两次启动
// program.cs
using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Http;
using System.IO;
using Newtonsoft.Json;
namespace MyApp
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Loading());
}
public static bool CheckInternet()
{
try {
using (var web = new WebClient())
using (web.OpenRead("http://google.com"))
return true;
} catch {
return false;
}
}
}
}
我希望能解释清楚。如果你有任何问题,不要犹豫
感谢所有有时间帮助我的人。这里可以为控制流执行各种实现(我认为@jimi关于使用DialogResult
的评论是一种不错的方法),但重要的是,不要尝试执行嵌套的应用程序。运行调用
在这个实现中,我们将关闭加载
表单
,它将在Main
中继续执行。请注意,执行Application.Exit
也将继续在Main
中执行,但实际上它不会运行任何新表单。因此,您确实有一个场景,我们可以在其中添加该行为(无论您是否真正打算使用该行为,都取决于您的需求)
其次,
我们将移动Application.Exit()
到程序的else块。检查Internet
条件检查
我们将删除应用程序。从StartApp
我们将在现在命名不正确的StartApp
函数范围中执行Loading
表单
public Loading()
{
InitializeComponent();
this.text_version.Text = "0.0.0.1";
if (Program.CheckInternet())
{
var timer = new System.Windows.Forms.Timer();
timer.Interval = 2000;
timer.Tick += (s, e) =>
{
timer.Stop();
StartApp();
};
timer.Start();
} else {
Application.Exit();
}
}
private void StartApp()
{
this.l_info.Text = "Starting app...";
this.l_info.Location = new System.Drawing.Point(70, 270);
Close(); //this.Close for Form instance close, not Application.Exit
}
我们需要一个。您可以使用Someform.ShowDialog()
而不是Application.Run(new Someform())代码>。调用Application.Run(newmainform())关闭对话框后的代码>。如果你真的需要一张表格来检查此人是否与互联网连接良好,那就是。我不明白为什么,但是…继续,并包括异常/错误,也许用“在执行多个应用程序运行调用时抛出”之类的情绪更新您的问题标题,这应该会改善这一点question@Jimi我试着放一个ShowDialog()
在应用程序前面。运行
但我仍然得到相同的错误系统。InvalidOperationException
您尝试了什么?您是否尝试过移动应用程序.Run(新应用程序())代码>超出StartApp
范围及以下应用程序。运行(新加载())代码>在Main
中?我修改它可以正常工作,但文本仍然存在相同的问题,没有时间更改。否则我只是想将时间(例如)增加到5000,然后检查到2000并更改为新文本。你认为这是一件好事吗?这个答案的真正目的是解决这个异常,并演示如何成功地运行应用程序。运行两次(运行两个单独的表单实例..但不是同时运行);对于这个与启动应用程序的状态/进度相关的splashscreen功能,更好的实现和方法是使用线程。我查看了文档:我尝试了,但我不理解线程是如何工作的,因为最终它在完成之前不会显示表单。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Loading());
Application.Run(new App());
}
public Loading()
{
InitializeComponent();
this.text_version.Text = "0.0.0.1";
if (Program.CheckInternet())
{
var timer = new System.Windows.Forms.Timer();
timer.Interval = 2000;
timer.Tick += (s, e) =>
{
timer.Stop();
StartApp();
};
timer.Start();
} else {
Application.Exit();
}
}
private void StartApp()
{
this.l_info.Text = "Starting app...";
this.l_info.Location = new System.Drawing.Point(70, 270);
Close(); //this.Close for Form instance close, not Application.Exit
}