C#经常会遇到UI线程被占用导致的界面卡顿,控件反应缓慢,局部停顿导致全界面停顿,这都是因为单一UI线程导致的,现在使用C#自动生成winform都是单一UI线程,想要多UI线程只能自己手动添加,核心代码如下:
private void messageLoop(IntPtr handle, Size size)
{
father = new Father();
Win32API.SetParent(father.Handle, handle);
father.Location = new Point();
father.Size = size;
father.Dock = DockStyle.Fill;
father.Show();
Message msg;
while (true)
{
Application.DoEvents();
if (Win32API.PeekMessage(out msg, IntPtr.Zero, 0, 0, (uint)1))//Peek不阻塞,如果使用GetMessage会阻塞 #define PM_NOREMOVE 0x0000 #define PM_REMOVE 0x0001
{
Win32API.TranslateMessage(ref msg);
Win32API.DispatchMessage(ref msg);
}
else
{
Win32API.WaitMessage();
}
}
}
这样即使局部卡死也不会影响其他的UI线程中的控件,有类似问题的朋友可以一试
代码分享:点击打开链接