请问c# 如何在捕捉到异常后,重新运行然后触发一个button_click事件运行程序呢
我调用一个dll经常出现异常死机,我想捕捉到异常后,重新运行自身
把软件的一些选择比如说 上网方式=adsl 传过去
然后触发一个button_click事件运行程序
请问c#中如何实现? --------------------编程问答-------------------- 在catch中调用就行了 --------------------编程问答-------------------- Btn_1.Perclick();好像有这个方法. --------------------编程问答-------------------- 一个WinForm的程序,添加两个按钮,点button1的时候出了异常,捕捉后触发button2的Click事件
ASP.NET也一样
--------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace WinFormJustTry
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
throw new Exception();
}
catch
{
button2_Click(sender,e);
}
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("调用了");
}
}
}
try
{
}
catch
{
button_Clicked(null,null);
} --------------------编程问答-------------------- 大家理解错了
异常后再运行下去就要崩溃了
我需要的是
这个程序将自己再启动一次
然后处罚button_Click --------------------编程问答-------------------- --------------------编程问答-------------------- 刚才看到有人说App.Restart() --------------------编程问答-------------------- 你问的重点是要程序自动重启本程序。
可以编写一个服务,在你的程序需要重启的时候启动该服务,让该服务关闭你的程序并重启你的程序。
有点绕口。
至于调用button_Clicke是很容易实现的。
下面是前几天写的,不知道对你有没有帮助,其中的EventLog是调试用的。
public partial class ServiceTest : ServiceBase
{
public ServiceTest()
{
InitializeComponent();
}
Thread MonitorThread;
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
//开处理监控的线程,采用循环的办法去处理。
this.ProgramMonitorTimer.Enabled = true;
}
public void MonitorProcess()
{
// Create the source, if it does not already exist.
if (!EventLog.SourceExists("MySource"))
{
EventLog.CreateEventSource("MySource", "MyNewLog");
}
EventLog myLog = new EventLog();
myLog.Source = "MySource";
List<String> CurrentSystemProcessList = new List<String>();
CurrentSystemProcessList.Clear();
Process[] localAll = Process.GetProcesses();
//EventLog myLog = new EventLog("ServiceTest", ".", "ServiceTest");
StringBuilder msg = new StringBuilder("");
for (int i = 0; i < localAll.Length; i++)
{
if (localAll[i].ProcessName == "Test")
{
//localAll[i].Close();
try
{
bool IsCloseMainWindow = false;
IsCloseMainWindow=localAll[i].CloseMainWindow();
if(!IsCloseMainWindow)
{
msg.Remove(0, msg.Length);
msg.Append(DateTime.Now.ToString());
msg.Append(" 进程调用CloseMainWindow,没有成功!");
myLog.WriteEntry(msg.ToString());
localAll[i].Kill();
}
localAll[i].WaitForExit();
//this.Stop();
Process.Start(@"D:\Test.exe");
msg.Remove(0, msg.Length);
msg.Append(DateTime.Now.ToString());
msg.Append(" 程序执行成功!");
myLog.WriteEntry(msg.ToString());
}
catch (Win32Exception ee)
{
msg.Remove(0, msg.Length);
msg.Append(DateTime.Now.ToString());
msg.Append(" 退出程序失败!");
myLog.WriteEntry(msg.ToString());
}
}
}
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
//MonitorThread.Abort();
this.ProgramMonitorTimer.Enabled = false;
}
private void StartMonitorThread()
{
ThreadStart CmdThreadStart = new ThreadStart(this.MonitorProcess);
MonitorThread = new Thread(CmdThreadStart);
MonitorThread.Name = "MonitorThread";
MonitorThread.Start();
}
private void ProgramMonitorTimer_Elapsed(object sender,System.Timers.ElapsedEventArgs e)
{
this.StartMonitorThread();
}
}
补充:.NET技术 , C#