当前位置:编程学习 > C#/ASP.NET >>

请问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 --------------------编程问答--------------------
引用 4 楼 Red_angelX 的回复:
try 


catch 

button_Clicked(null,null); 
}
--------------------编程问答-------------------- 刚才看到有人说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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,