Моя программа работает следующим образом:Не удается выполнить многозадачность, создает ошибки?
Его программа, с которой вы можете выключить сервер, имеет несколько событий триггера. вы должны установить время для фактического обратного отсчета в программе, чтобы увидеть его в игре.
(пример)
если вы нажмете 1 час (техническое обслуживание) внутриигровой литая бы сказал, что будет обслуживание в течение 1 часа. , чем вы выбрали (15 минут) продолжительности обслуживания. (автоматическое обслуживание). вы нажимаете кнопку выключения, триггеры начинают уходить.
В точке запуска запускается рабочий, где начинается фактическая работа. altho ... его работа, но не так, как я этого хочу.
я хочу, чтобы это сделать:
(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.");
}
}
раз я выполнить программу, все события работают, кроме рабочего, (он работает, но застревает на первой работе, он заканчивает его, но чем он держит зацикливание. работа 1, а я 2 рабочих места в списке.
Кроме того, когда он начинает первую работу, это дает мне Wich ошибки исключения в первой работе.
(первое задание)
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!");
}
}
}
так что у меня есть странная ситуация, из-за которой я просто не могу выбраться.
он работает, но зацикливается на задании1, а также t продолжает говорить «« OPT не обнаружен или некорректен », в то время как все в зашифрованном файле opt правильное. (это сработало раньше, но я не хочу, чтобы две команды sql запускались одновременно с причиной возникновения взаимоблокировок.)
Ну, прежде всего, ваш заголовок вопроса * далеко * слишком расплывчатый, * * Невозможно выполнить многозадачность, создает ошибки * "- какие именно ошибки, какие строки? Также какой класс/объект «OPT»? – James
раздел OPT работает нормально, ошибка получается из исключения job1. '' OPT не обнаружен или команда OPT неверна! '', Но в то же время он говорит, что он выполнил job1. и он действительно это сделал. – user1547355
"* Он продолжает говорить:« OPT не обнаружен или не указана некорректно »* - это означает, что возникает исключение, вы проверили, какое именно * исключительное исключение оно есть? С самого начала вы можете взять свойство «Message» из исключения, а не выводить свои собственные, это может дать вам подсказку о том, что происходит.Кроме того, как правило, никогда не рекомендуется поймать «Исключение» в любом случае, так как это слишком * слишком широко, вы должны поймать определенные исключения, которые вы можете обработать. – James