c#将新线程(()添加到Application.Current.Dispatcher需要很长时间

c#将新线程(()添加到Application.Current.Dispatcher需要很长时间,c#,.net,wpf,multithreading,visual-studio,C#,.net,Wpf,Multithreading,Visual Studio,我在主线程中创建了新线程 new Thread(() => { // my code System.Diagnostics.Debug.WriteLine("my code completed"); Application.Current.Dispatcher.Invoke(MyMethod, Dispa

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

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

我在输出窗口中看到,在调用
MyMethod

The thread 0x2954 has exited with code 259 (0x103)

为了解决这个问题,我尝试使用
thread.CurrentThread.Abort()中止当前线程
但这并不能解决我的问题。我想在
我的代码
完成后立即调用
MyMethod

创建线程时,很多处理都是在代码实际运行之前进行的。如果需要代码更具响应性,请查看线程池(
任务
基本上是一样的)

请记住,即使有一个线程池,也可能需要一段时间来开始工作,但这应该比从一个全新的线程开始要少得多


对于代码,您要做的是启动一个线程(这可能需要很长时间),然后要求您的线程将控制权传递回UI线程,UI线程本身可能正忙于做其他事情,并且在代码空闲之前无法运行代码。

为什么不使用线程而不使用任务,然后您可以使用Task.ContinueWith调用MyMethod。请参阅使用调试>窗口>线程以了解主线程为何如此繁忙,请小心因为它燃烧100%的内核。使用Invoke而不是BeginInvoke是一个标准的WPF错误。259退出代码是由VS2015中的一个bug引起的,在其他方面并不意味着什么。还要记住,即使有线程池,池中的所有线程都可能很忙,因此将新线程搁置,直到有一个线程释放。“任务基本上是一样的”不,一个
任务
不涉及
线程
@camiloteriento任务最终是在线程上运行的,但是对于像Vijay这样的初学者来说,差别是很微妙的。对于像你这样的专家来说,这种差别可能是巨大的。