WPF VSTS应用程序挂在VS凭据提示上

我正在尝试编写一个使用Visual Studio Team Service(VSTS)API的应用程序来显示Visual Studio Online中的项目。

我有以下代码在控制台应用程序中完美运行:

var connection = new VssConnection(new Uri(collectionUri), new VssClientCredentials()); using (var witClient = connection.GetClient()) { var wiql = new Wiql { Query = "SELECT [System.Id] FROM WorkItems WHERE State = 'New'" }; var workItems = await witClient.QueryByWiqlAsync(wiql); } 

在控制台应用程序中,我收到一个Visual Studio提示输入凭据,一切都很好。 但是,当我从WPF运行相同的代码时,我没有得到提示,并且应用程序似乎挂起了。

在允许它从按钮单击事件异步运行后,我在WPF应用程序中工作了一小段时间。 然后我做了一些更改,几小时后 – 我一直无法得到它。 我按照CTRL + Z的方式回到它工作的地步,但仍然没有。 我怀疑这与线程管理有关,我已经尝试了使用Dispatcher.Invoke并在Window_Loaded运行或将其连接到一个按钮所能想到的一切。

我完全难过了。

我正在使用以下NuGet包:

 PM> Install-Package Microsoft.TeamFoundationServer.ExtendedClient 

您需要启动另一个线程来执行它(例如System.Threading.Tasks.Task.Run)。

例如:

 private void button_Click(object sender, RoutedEventArgs e) { var workitem = System.Threading.Tasks.Task.Run(() => GetItems(123)).Result; } public WorkItem GetItems(int itemId) { var myCredentials = new VssClientCredentials(); var vstsConnection = new VssConnection(new Uri(@"https://XXX.visualstudio.com/"), myCredentials); var vstsClient = vstsConnection.GetClient(); var workItem = vstsClient.GetWorkItemAsync(itemId).Result; return workItem; } 

另一方面,您可以直接在代码中指定帐户(可以让用户使用自定义登录窗口提供帐户)。

 var u = new Uri("XXX"); VssCredentials c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("[user name]", "[password]"))); var connection = new VssConnection(u, c); 

试试这个:

 TfsClientCredentials tcc = new TfsClientCredentials(); tcc.AllowInteractive = true; TfsTeamProjectCollection ttpc = new TfsTeamProjectCollection(new Uri("https://xjsdal.visualstudio.com"), tcc); using (var witClient = ttpc.GetClient()) { var wiql = new Wiql { Query = "SELECT [System.Id] FROM WorkItems WHERE State = 'New'" }; var workItems = await witClient.QueryByWiqlAsync(wiql); }