我的第一个问题。我希望我不会犯任何错误......
我是一名初学自学成才的爱好者C#程序员(书籍,谷歌搜索,msdn,并为自己编写应用程序)。 我忘记了这可能是一些愚蠢或明显的事情,但我不能自己解决这个问题。谷歌让我失望,所以我需要一些帮助和指导。
我从8个小时开始坚持到现在,现在在半夜我正在寻求帮助。 欢迎提供所有提示和建议。
提前谢谢!
我有2个表格。 OnButtomclick表单A运行表单B,问题所在。
在表格B中的所有其他内容(控件等)中,我有一个在线程中运行的计时器,它每隔x秒向服务器发送一个命令scfile = Ncom.sendcmd("gsc|||" +DWith+"|||"+DHeigh+"$", false)
。
在表单B打开后触发计时器和线程。
在表格B上,我有一个控件(组合框),它最终会更改myTimer.Interval
和另一个(Tickbar)的值,以控制DWith
和DHeigh
如果我关闭表格B并再次打开 n 次,则每个计时器“勾选”该命令执行 n + 1 次。我无法弄清楚这一点。
另外我注意到,如果我打开表单B,将DWith
和DHeigh
更改为1
和3
,请关闭表单,再次打开,将值更改为{{1 }和2
,再次关闭并打开它,每个计时器滴答我将被执行:
5
scfile = Ncom.sendcmd("gsc|||" +1+"|||"+3+"$", false);
scfile = Ncom.sendcmd("gsc|||" +2+"|||"+5+"$", false);
而不仅仅是:
scfile = Ncom.sendcmd("gsc|||" +8+"|||"+9+"$", false);
其中scfile = Ncom.sendcmd("gsc|||" +8+"|||"+9+"$", false);
和8
是打开表单B后命令的默认值
我虽然可能线程未完成或计时器未停止。所以在My FormClosing事件9
中,我尝试了所有内容,包括RDFormClosing(object sender, FormClosingEventArgs e)
(我知道中止/杀死线程是一个坏主意),但仍然没有运气。
出于好奇,我试图将Thread.Abort();
值更改为false。仍然是同样的问题。只是它没有每隔x秒重复一次。
我错过了什么?为什么会发生这种情况,即使我在关闭表格B之前停止计时器并杀死线程?如何解决?
表格B从表格A中打开:
myTimer.AutoReset
在表格B中我有这样的事情:
void ButtonSDeClick(object sender, System.EventArgs e)
{
rD form = new rD(Ncom);
form.Show();
form.Closed += new System.EventHandler(DesktopFormClosed);
}
答案 0 :(得分:3)
您的计时器是静态的,而您的表单则不是。因此,每次注册Elapsed时,它都会聚合。正如其他人所评论的那样,在表格关闭时删除该事件应该照顾它。