不能同时处理多个任务,会产生错误

本文关键字:错误 任务 处理 不能 | 更新日期: 2023-09-27 18:18:13

程序如下:

这是一个程序,你可以关闭一个服务器,它有多个触发事件。你必须在程序中设置一个实际倒计时的时间,才能在游戏中看到它的打印。

(示例)

如果你在游戏中点击1小时(维护)会说1小时后会有维护。然后选择(15分钟)维护时长。(自动维护)。你按下关机键,触发器开始自动关闭。

在一个触发点开始工作,在那里实际的工作开始。尽管……它在工作,但不是我想要的方式。

我想让它做:

(do_this第一)(等待此操作完成并确认数据库连接已关闭)(执行列表上的下一个功能)等等。

当前代码如下:

    private void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        try
        {
            //Create Thread for multitask
            Thread Del_Char_Related_WORKER = new Thread(new ThreadStart(Del_Char_Related));
            Thread Del_Null_Item_WORKER = new Thread(new ThreadStart(Del_Null_Item));
            //Start Multitask
              Del_Char_Related_WORKER.Start();
              Del_Null_Item_WORKER.Start();
        }
        catch (Exception)
        {
            MessageBox.Show("Worker Got Tired of Working.");
        }
        
    }

一旦我执行了程序,所有事件都工作了,除了worker(它工作了,但是在第一个任务上卡住了,他完成了它)。但是他一直循环工作1,而我列出了2个工作。

另外,当它启动第一个作业时,它会给我第一个作业中的异常错误。

(第一份工作)
    void Del_Char_Related()
    {
        if (checkBox3.Checked == true)
        {
            try
            {
                string connect = string.Format("Data Source={0},{1};Initial Catalog={2};User Id={3};Password={4};",
                OPT.GetString("db.server"),
                OPT.GetString("db.port"),
                OPT.GetString("db.name"),
                OPT.GetString("db.account"),
                SFM.GetDecryptMD5(OPT.GetString("db.password"));
                SqlConnection sqlcon = new SqlConnection(connect);
                sqlcon.Open();
                new SqlCommand("DECLARE @Rows INT,@sid INT,@acc_id INT SET @Rows = 1 WHILE (@Rows > 0) BEGIN SET @sid = (SELECT TOP(1) sid FROM dbo.Character WHERE name LIKE '%@%') SET @acc_id = (SELECT TOP(1) account_id FROM dbo.Character WHERE name LIKE '%@%') DELETE TOP (1) FROM dbo.Character WHERE name LIKE '%@%' SET @Rows = (SELECT count(sid) FROM dbo.Character WHERE name LIKE '%@%') DELETE FROM dbo.Item  WHERE owner_id = @sid OR account_id = @acc_id DELETE FROM dbo.ItemCoolTime WHERE owner_id = @sid DELETE FROM dbo.State WHERE owner_id = @sid DELETE FROM dbo.Quest WHERE owner_id = @sid DELETE FROM dbo.QuestCoolTime WHERE owner_id = @sid DELETE FROM dbo.Skill WHERE owner_id = @sid DELETE FROM dbo.Guild where leader_id = @sid END", sqlcon).ExecuteNonQuery();
                Thread.Sleep(60000);
                sqlcon.Close();
                MessageBox.Show("Ive completed my duty (TASK1)");
            }
            catch (Exception)
            {
                if (OPT.GetString("db.port") == "")
                {
                    MessageBox.Show("Unable to detect a PORT!");
                }
                MessageBox.Show("No OPT detected or OPT command incorrect!");
            }
        }
    }

所以我遇到了一个奇怪的情况,我就是无法摆脱。

可以工作,但是在job1处被循环,并且t一直说"未检测到OPT或命令不正确",而加密的OPT文件上的所有内容都是正确的。(这以前工作过,但我不希望同时启动2个sql命令,因为死锁的风险可能会断开服务器。)

不能同时处理多个任务,会产生错误

通过显示任意消息,可以说是在吞食异常。相反,使用catch:

中提供的Exception实例
catch (Exception ex) {
  MessageBox.Show(ex.Message);
}

虽然,我不一定宽恕抛出对话框,你可以使用调试器打破catch块,询问的东西和东西,并纠正问题。