2016-04-08 16 views
1

ユーザー名とパスワードまたはカードリーダー経由でログインを実行するUWPアプリケーションがあります。 これは私のコードです。UWPアプリでCardAdded機能が起動しない

public sealed partial class MainPage : Page 
{ 
    private SynchronizationContext uiContext = null; 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     getMenu(); 

     uiContext = SynchronizationContext.Current; 
     smartCard(); 
    } 

    private async void smartCard() 
    { 
     string selector = SmartCardReader.GetDeviceSelector(); 
     DeviceInformationCollection devices = 
      await DeviceInformation.FindAllAsync(selector); 

     foreach (DeviceInformation device in devices) 
     { 
      SmartCardReader reader = await SmartCardReader.FromIdAsync(device.Id); 
      reader.CardAdded += Reader_CardAdded; 
     } 
    } 

    private void Reader_CardAdded(object sender, CardAddedEventArgs args) 
    { 
     try 
     { 
      SmartCardReader send = (SmartCardReader)sender; 
      // some stuff 
      Debug.WriteLine(send.DeviceId); 
      // A card has been inserted into the sender SmartCardReader. 
     } 
     catch (Exception e) 
     { 
      Debug.WriteLine("CardAdded Exception: " + e.Message); 
     } 
    } 

毎回私のカードリーダーがカードを読み込んで、それだけで関連するcardAdded機能を実行せずに、集中テキストボックスにカードコードを印刷します。カードがカードリーダーに渡されると、すぐに機能が起動される必要があります。 私はそれに間違って何をしているのですか?

答えて

0

この行: SmartCardReader reader = await SmartCardReader.FromIdAsync(device.Id);はキューピッドです。これはローカルスコープ変数を作成し、イベントハンドラはローカルforeachスコープを離れると削除されます。 SmartCardReader readerをクラススコープに移動すると修正されます。

+0

私は機能の外で 'SmartCardReader reader'を移動しました。 'SynchronizationContext uiContext = null;'の直下ですが、何も変更されていません – Janinho67

+0

これは間違っています。 GCはそれを起こさせません。 - とにかく、このコードは1つのデバイスで正常に動作し、別のデバイスではイベントは発生しません。 - UWPカードリーダーのサポートのバグか、それとも別の方法があるようですか? – BrainSlugs83

関連する問題