【发布时间】:2014-04-14 22:42:34
【问题描述】:
我正在尝试检测互联网连接,如果互联网连接可用并且已连接,它将继续,否则会抛出消息框说连接不可用。
我遇到的是互联网连接是否连接,代码将继续。
代码如下:
** 即使没有可用的互联网连接,该程序也会继续worker_ProgressChanged **
public CheckUpdates()
{
InitializeComponent();
bool checkConnection = CheckConnection.IsConnectedToInternet();
progressBar1.Style = ProgressBarStyle.Marquee;
if (checkConnection == true)
{
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(worker_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
else
{
System.Media.SoundPlayer _sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
_sound.Play();
DialogResult _dialogResult = MessageBox.Show("No connection available, please check your internet connection!", "No connection");
if (_dialogResult == DialogResult.OK)
{
this.Hide();
this.Close();
}
}
}
private void CheckUpdates_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
if (e.ProgressPercentage.Equals(100))
{
System.Media.SoundPlayer _sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
_sound.Play();
DialogResult _dialogResult = MessageBox.Show("No updates were available!", "No updates");
if (_dialogResult == DialogResult.OK)
{
this.Hide();
this.Close();
}
}
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_timer.Enabled = true;
_timer.Tick += new EventHandler(Timer_Tick);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
System.Threading.Thread.Sleep(100);
}
}
void Timer_Tick(object sender, EventArgs e)
{
_timer.Enabled = false;
}
class CheckConnection
{
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
public static bool IsConnectedToInternet()
{
int Desc;
return InternetGetConnectedState(out Desc, 0);
}
}
非常感谢您的回答!
非常感谢!
【问题讨论】:
-
那是很多愚蠢的代码,没有做任何你展示给我们的事情。后台工作人员只是在循环。计时器没有做任何事情。
-
让我知道谁在调用事件 CheckUpdates_Load 或 WelcomeScreen_Load
-
@Steve:对不起,WelcomeScreen_Load 来自其他表单,我只是复制并粘贴 WelcomeScreen 表单上的所有内容(因为欢迎屏幕也包含后台工作人员),对于 CheckUpdates_Load,该事件当我单击链接到上面代码中未显示的 CheckUpdates 表单的按钮时将触发(关于我如何调用 CheckUpdates 表单)
标签: c# winforms connection