2016-10-25 4 views
3

Visual Studio Team Service(VSTS)APIを使用してVisual Studio Onlineのアイテムを表示するアプリケーションを作成しようとしています。WPF VSTSアプリケーションがVS資格情報プロンプトで応答しない

私はコンソールアプリケーションで完璧に動作し、次のコードを持っている:コンソールアプリで

var connection = new VssConnection(new Uri(collectionUri), new VssClientCredentials()); 
using (var witClient = connection.GetClient<WorkItemTrackingHttpClient>()) 
{ 
    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 
+0

あなたは、あなたがそれをチェックすることができ、私は私の答えを更新し、実行するための新しいスレッドを開始する必要があります。 –

答えて

2

あなたはその(例えば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<WorkItemTrackingHttpClient>(); 
      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); 
1

これを試してみてください:

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