这是否比设置后台工作线程效率低?因为它运作良好,而且看起来更干净。在循环中,我调用BeginInvoke 3x-向主窗口datagrid添加行,并更新进度条和消息。
public MyConstructor()
{
InitializeComponent();
ThreadStart start = delegate()
{
for (...)
{
...
MyWindow.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
new Action(delegate()
{
// Do something on the MyWindow thread.
}
));
...
}
// Intensive loop now done and we close this processing window.
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
new Action(delegate()
{
this.Close();
}
));
}; // ThreadStart
new Thread(start).Start();
}
参考方案
可以,但有几点要点:
您可能应该在Thread对象上设置IsBackground,这样它才不会导致应用程序在退出时挂起。
如果这是短期活动,则不应创建新线程,而应使用ThreadPool.QueueUserWorkItem或.NET4上的新“任务”东西。
如果后台线程(池或手动创建的)上有未处理的异常,则该应用程序将以很少的故障失败。像“任务”这样的东西处理得更好。
您实际上并没有非常清楚地定义“效率”,但是BackgroundWorker通常是做这种事情的更好方法-如果没有其他选择,它将使用池线程,该池线程比手动创建的线程便宜得多。
为什么我无法更新字典中的test__user_id密钥? - python我正在更新包含数据的字典,dict_temp = {'description': 'hello', 'id': 683, 'status': u'pending', 'test__user_id': 430} 我试图使用dict_temp …
在datagrid(wpf)中选择行索引 - c#如何在datagrid中选择行索引? 事件SelectionChanged以下代码不起作用: private DataGridRow dgr = new DataGridRow(); private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { thi…
在Java游戏中实现拖放 - java我正在做一个棋盘游戏,它是一个具有5种不同颜色图像的8x8网格。只要对象在行或列中彼此相邻,就可以交换对象。如果切换导致行或列中的3个或更多对象相同,则将其删除。如果切换未导致匹配,则不会发生切换。移除对象后,木板会塌陷,因此位于移除对象上方的对象会掉落到位,而新对象会从顶部掉入以填充空间。我想知道一种实现拖动操作和使对象掉落的好方法。我应该使用分层窗格吗?…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…