【发布时间】:2012-07-16 11:06:43
【问题描述】:
我在使用基于各种表单和各种线程的应用程序时遇到了问题。线程在应用程序结束之前关闭,但即便如此我也无法以 100% 的准确度终止我的应用程序。
有时该过程仍会继续工作,但没有任何显示(Forms 甚至Threads)。我认为问题出在program.cs上,几乎可以肯定,所以我将代码粘贴在这里
private static Process old;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
XmlConfigurator.Configure();
if (PriorProcess() != null)
{
try
{
old.Kill();
}
catch (Exception ex)
{
MessageBox.Show("Ja existe uma instancia do SpotLight em execucao.", "Aviso");
return;
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Support());
}
public static Process PriorProcess()
{
Process curr = Process.GetCurrentProcess();
Process[] procs = Process.GetProcessesByName(curr.ProcessName);
foreach (Process p in procs)
{
if ((p.Id != curr.Id) && (p.MainModule.FileName == curr.MainModule.FileName))
{
old = p;
return p;
}
}
return null;
}
New Support() 这是我在应用程序中出现的第一个表单。
这是线程的代码:
private void check_calls()
{
while (stop==false)
{
string actualTime = DateTime.Now.ToString("T");
connection = new MySqlConnection(ConnectionString);
MySql.Data.MySqlClient.MySqlCommand msqlCommand = new MySql.Data.MySqlClient.MySqlCommand();
msqlCommand.Connection = connection;
msqlCommand.CommandText = "Select cd.uniqueid,sup.timespan from contactCenterDevel.cc_cdr_support_pending sup, vboxZon.cdr cd WHERE sup.phone=cd.src AND cd.finish=0 AND cd.accountcode='serviin' AND cd.duration >0 AND cd.lastapp='Vxml' ORDER BY cd.calldate DESC LIMIT 1";
try
{
connection.Open();
MySql.Data.MySqlClient.MySqlDataReader msqlReader = msqlCommand.ExecuteReader();
while (msqlReader.Read())
{
int timespanCompare = convertTimetoSecs(msqlReader.GetString(1));
int actualtimeCompare = convertTimetoSecs(actualTime);
if (timespanCompare < actualtimeCompare)
{
updateFlagCDR(msqlReader.GetString(0));
}
}
}
catch (Exception er)
{ MessageBox.Show("Mysql actions error: " + er); }
finally
{ connection.Close(); }
Thread.Sleep(10000);
}
}
当我的注销功能上的标志“停止”更改为真时,这个停止。我已经尝试过注释“thread.sleep”,但问题仍然出现。
【问题讨论】:
-
你能把主应用线程如何结束的代码贴出来吗?
-
您可以做的是:当您的应用程序处于 fantom 模式时,您运行 VS 并将其附加到您的进程。然后,您暂停执行并显示线程(调试菜单 => 窗口 => 线程)。您是否(直接或间接)启动了任何线程?
-
插入的数据库连接线程代码
-
@Kek 我按照你说的做 KeK 并且没有线程仍在运行。
-
我解决了这个问题。我的应用程序与 Asterisk 服务器连接,并将其用作集成以在其上应用 VOIP。 Asterisk 运行一个线程,允许您“登录和注销”到服务器,并且该线程始终等待来自用户代码部分的最终响应。检查 Asterisk 的源代码,我注意到该线程不是 IsBackground 而是等待注销功能的 Sleep。这就是大多数时候应用程序没有关闭的原因,感谢你们的支持。
标签: c# windows winforms multithreading