C#new Thread(()到Application.Current.Dispatcher花费很长时间

时间:2018-07-05 13:15:07

标签: c# .net wpf multithreading visual-studio

我在主线程中创建了新线程

list.add(meMap.values());
arrayAdapter.notifyDataSetChanged();

执行 new Thread(() => { // my code System.Diagnostics.Debug.WriteLine("my code completed"); Application.Current.Dispatcher.Invoke(MyMethod, DispatcherPriority.ContextIdle); }).Start(); 后,调用my code需5-8秒

我在输出窗口中看到,给定的波纹管发生几次后才调用MyMethod

MyMethod

要解决此问题,我厌倦了使用The thread 0x2954 has exited with code 259 (0x103) 中止当前线程,但是它不能解决我的问题。我想在Thread.CurrentThread.Abort();完成后立即致电MyMethod

1 个答案:

答案 0 :(得分:1)

创建线程时,在代码实际运行之前会进行大量处理。如果您需要代码提高响应速度,请查看线程池(Task基本上是同一件事)。

请记住,即使使用线程池,也可能需要花费一些时间才能开始工作,但是它应该比使用全新线程开始要短得多。

对于您的代码,您正在执行的操作是启动一个线程(这可能需要很长时间),然后要求您的线程将控制权传递回UI线程,而该UI线程本身可能正忙于做其他事情而无法运行您的代码,直到免费。