C# 如何正确使用BeginInvoke方法?

C# 如何正确使用BeginInvoke方法?,c#,wpf,C#,Wpf,我有这个密码。它可以工作,但会冻结用户界面。 我想知道的是如何正确使用WPF BeginInvok方法 private void ValidateAuthURL_Click(object sender, RoutedEventArgs e) { ((Button)sender).Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { b

我有这个密码。它可以工作,但会冻结用户界面。 我想知道的是如何正确使用WPF BeginInvok方法

private void ValidateAuthURL_Click(object sender, RoutedEventArgs e)
{
    ((Button)sender).Dispatcher.BeginInvoke(DispatcherPriority.Input, 
        new ThreadStart(() =>
        {
            bool result = false;
            try
            { 

您的委托将在UI线程中执行。这就是Dispatcher.BeginInvoke的作用。我假设您真的想在后台线程中执行该委托。。。然后应该使用
Dispatcher.BeginInvoke
返回UI线程,以便稍后更新UI

在获取后台线程方面,您可以:

  • 直接使用线程池(
    ThreadPool.QueueUserWorkItem
  • 使用
    BackgroundWorker
  • 开始一个新的线程
  • 使用
    Task.Factory.StartNew
    (如果您使用的是.NET4)

您的委托将在UI线程中执行。这就是Dispatcher.BeginInvoke的作用。我假设您真的想在后台线程中执行该委托。。。然后应该使用
Dispatcher.BeginInvoke
返回UI线程,以便稍后更新UI

在获取后台线程方面,您可以:

  • 直接使用线程池(
    ThreadPool.QueueUserWorkItem
  • 使用
    BackgroundWorker
  • 开始一个新的线程
  • 使用
    Task.Factory.StartNew
    (如果您使用的是.NET4)

根据您发布的示例,您使用的是正确的。但是,Lambda函数中调用了什么代码?可能存在重入和/或死锁-是否使用其他线程?冻结时CPU的使用情况如何。最大值还是零?@Andrew Burnett Thompson博士我只使用var request=WebRequest.Create(serviceUrl)作为HttpWebRequest;等等…从你贴的例子来看,你用得对。但是,Lambda函数中调用了什么代码?可能存在重入和/或死锁-是否使用其他线程?冻结时CPU的使用情况如何。最大值还是零?@Andrew Burnett Thompson博士我只使用var request=WebRequest.Create(serviceUrl)作为HttpWebRequest;等等。。。