-2

get set プロパティでは、値が設定された後にのみ値を返します。リアクティブ ライブラリを使用し、別のスレッドで実行されるメッセージを購読しました。イベントが発生し、値が設定されると、値をキャプチャして戻ります。

 internal PinMessage()
        {
            obj.PinsAvailable.ObserveOn(SynchronizationContext.Current).Subscribe(HandlePinsAvailable);
        }      

        private void HandlePinsAvailable(byte[] pinBytes)
        {
           pinmesssage = Encoding.ASCII.GetString(pinBytes);           
        }

        public void Readvalue(object stringobj)
        {
            pinmesssage = (string)stringobj;
        }

        internal string GetPinMessage(string AccoutNumber)
        {
            string pinstring = string.Empty;
            obj.SendPinRequest(AccoutNumber);
            t1.Join();
            pinstring = pinmesssage;
            return pinstring;
        }

        private string _pinMessafe;

        public string pinmesssage
        {
            get
            {
//Get value only when the property is set
                return _pinMessafe;
            }
            set { _pinMessafe = value; }
        }
4

2 に答える 2

0

あなたはここでたくさんのものを混ぜています。Rx を使用する場合、スレッド結合を行ってスレッドをマーシャリングしようとはしません。Rx コードに出入りすることはありません。

コードはおそらく次のようになります。

internal IObservable<string> GetPinMessage(string AccoutNumber)
{
    return Observable
        .Start(() => obj.SendPinRequest(AccoutNumber))
        .Select(pinBytes => Encoding.ASCII.GetString(pinBytes))
        .ObserveOn(SynchronizationContext.Current);
}

私はそれSendPinRequestが同期要求であると仮定しました。Rx は、これを単一値の非同期オブザーバブルに変換します。

于 2013-09-05T00:15:07.517 に答える