我的程序如下:
它是一个可以关闭服务器的程序,它有多个触发事件。 你必须为程序中的实际倒计时设置一个时间,以便在打印的游戏中看到它。
(实施例)
如果你点击1小时(维护)游戏会说会在1小时内进行维护。 比你选择(15分钟)维持时间。 (自动维护)。 你按下关机,触发开始走开。
触发器启动工作点,实际工作开始。 虽然...它的工作但不是我想要的方式。
我希望它能做到:
(先做这个) (等待此操作完成并确认数据库连接已关闭) (在列表上做下一个功能) 等等。
目前代码如下:
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.");
}
}
一旦我执行了该程序,所有事件都可以工作,除了工作人员(它工作但是在第一份工作时遇到困难,他完成了它。但是,当我列出2个工作时,他继续循环工作1。
此外,当它启动第一个作业时,它会在第一个作业中出现异常错误。
(第一份工作)
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上循环,而且在加密的opt文件中的所有内容都正确时,仍然会说''没有检测到OPT或命令不正确'。 (这个以前工作过,但我不希望同时启动2个sql命令导致死锁的风险可能会断开服务器。)
答案 0 :(得分:0)
您可以通过显示任意消息来吞咽您的异常。相反,请使用Exception
中提供的catch
实例:
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
虽然,我不一定宽恕抛出对话框,但您可以使用调试器中断catch
块,查询内容和事物,并纠正问题。