Has*_*san -2 c# multithreading winforms
首先,我正在创建新线程,因为我想在表单上显示光标位置。所以,这就是我所做的,在课堂上,我创建了一个线程并使用该线程运行该方法,该方法将光标位置分配给我的表单上的标签。
public partial class Main : Form
{
public Main()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}
private void GetCurLoc()
{
while (true)
{
PosX.Text = MousePosition.X.ToString();
PosY.Text = (Int32.Parse(PosYMax.Text) - MousePosition.Y).ToString();
}
}
private void Main_Load(object sender, EventArgs e)
{
Thread curLoc = new Thread(new ThreadStart(GetCurLoc));
curLoc.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,该应用程序会消耗大量 CPU 和电量。为什么一个线程会消耗这样的CPU?对我来说,似乎我的线程创建正在造成资源泄漏。
请帮忙。
while(true) 尽可能快地旋转,您的 CPU 使用率将达到 100%。
添加一些延迟。是的,听起来很糟糕,但是如果您真的想要一个,while(true)那么出于您的某些业务原因,它必须以 100% 的 CPU 速度旋转,或者您可以将其减慢到可接受的“经常”水平。如果那是 UI 代码,可能在迭代之间添加 25-100 毫秒的延迟就可以了。
或者,完全摆脱循环。似乎这个循环检查鼠标位置并将其存储在某处。使用鼠标事件在鼠标位置发生变化时收到通知并仅在此类事件到达时才采取行动,而不是忙于循环和盲目地检查“我们到了吗?” 每时每刻。