删除或替换调用委托 C#
本文关键字:调用 替换 删除 | 更新日期: 2023-09-27 18:35:56
毕竟。我不太擅长这个,希望你无论如何都能理解它。我在我的程序中创建了一个函数,它检查 rtb 中的一行是否突出显示。如果没有,它会突出显示它。为此,我必须使用不同的线程才能从不同的地方访问 rtb。我的问题是每次计时器刷新时它都会创建一个新的"委托"/实例/线程。我想删除旧线程/委托或用新线程/委托替换它。因为现在程序在一段时间后崩溃。这是一个非常小的程序,但在 40 秒后,我的内存使用率超过 3gb。
提前感谢!哈里斯。
法典:
private void Timer()//Timer for color refresh
{
aTimer = new System.Timers.Timer(300);
aTimer.Elapsed += new ElapsedEventHandler(Form1_Load);
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private void RefreshColor()//Refreshing the color of selected row
{
this.Invoke((MethodInvoker)delegate
{
if (richTextBox1.SelectionBackColor != Color.PaleTurquoise)
{
HighlightCurrentLine();
}
});
}
private void Form1_Load(object sender, EventArgs e)
{
Timer();
RefreshColor();
如果我
没记错的话,正在发生的事情是你正在成倍地创建和启动新的计时器。因此,您的窗体加载,Form1_Load调用方法。Form1_Load创建一个新的计时器,该计时器在经过后将再次调用Form1_Load。由于旧计时器未被释放,现在正在运行 2 个计时器,这将创建 2 个新计时器。4 个计时器创建 4 个新计时器,因此有 8、16、32 等......
基本上,您所要做的就是在计时器经过时调用其他方法:
private void Timer()//Timer for color refresh
{
aTimer = new System.Timers.Timer(300);
aTimer.Elapsed += ATimer_Elapsed;//new ElapsedEventHandler(Form1_Load);
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private void ATimer_Elapsed(object sender, ElapsedEventArgs e)
{
RefreshColor();
}
private void RefreshColor()//Refreshing the color of selected row
{
this.Invoke((MethodInvoker)delegate
{
if (richTextBox1.SelectionBackColor != Color.PaleTurquoise)
{
HighlightCurrentLine();
}
});
}
private void Form1_Load(object sender, EventArgs e)
{
Timer();
RefreshColor();
Timer(); 只被调用,因此只创建一个定时器。