c#winform多线程

langxingcs 2013-11-13 11:42:47
在一个窗口上加载了几个自定义控件,打开这个窗口时出现短暂白屏(卡死似的),为了解决这个问题,我用了多线程,但没有效果.不知道问题出在哪,下面是代码,麻烦给看一下,多谢.
private void FormMain_Load(object sender, System.EventArgs e)
{ add_cotrol1();//多线程
add_cotrol2();//多线程
}
private void add_cotrol2()
{
Thread thread = new Thread(new ThreadStart(StartSomeWorkFromUIThread2));
thread.IsBackground = true;
thread.Start();
}
private void StartSomeWorkFromUIThread2()
{
if (this.InvokeRequired)
{
BeginInvoke(new EventHandler(RunsOnWorkerThread2), null);
}
else
{
RunsOnWorkerThread2(this, null);
}
}
private void RunsOnWorkerThread2(object sender, EventArgs e)
{
//加载控件
.......我的代码.
}
...全文
171 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2013-11-13
  • 打赏
  • 举报
回复
这里多线程一点用都没有,因为你都不知道为什么白屏。
Doublemine 2013-11-13
  • 打赏
  • 举报
回复
我也遇到同样的问题
_小黑_ 2013-11-13
  • 打赏
  • 举报
回复
那是因为 正在加载 你的自定义 控件
飞小猪 2013-11-13
  • 打赏
  • 举报
回复
你先确定界面卡是因为加载控件中的数据卡,还是因为加载控件卡的,如果是加载控件时卡了,那没什么太好的办法,即使你用了多线程,最后还得UI线程来显示控件,如果是加载控件里的数据卡,这个可以用线程取到数据之后在委托给UI线程显示。
feiniao19830822 2013-11-13
  • 打赏
  • 举报
回复
先找原因,再想对策,多线程不是万能药。 而且你的多线程使用也不对,虽然你使用了子线程,但是你又使用了BeginInvoke,这样RunsOnWorkerThread2还是在主线程(UI线程)中执行的。 界面卡很多是中断引起的,比如Thead.Sleep(1000)等,总之先查原因。
langxingcs 2013-11-13
  • 打赏
  • 举报
回复
为什么一点用都没有?我加载自定义控件就白屏,不加载就没有问题,而且数据库处理几乎不用考虑

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧