0

これが私が理解していないことです:私は私のメインプログラムが別のdll(スレッド)からの変数を監視することを望みます。この変数はbool、外部ハードウェアトリガーに応じてtrueとfalseの間で変化するフラグです。これが私がしたことですが、どうやらそれは変数の変更に応答していませんでした:

public bool IsTriggerOn
{
    get { return TriggerWatcherDll.IsTriggerOn; }
    set
        {
             _isTriggerOn= TriggerWatcherDll.IsTriggerOn = value;
             if (_isTriggerOn == true)
             {
                  System.Windows.Forms.MessageBox.Show("Trigger is ON!");
             }
         }
}

これをどの程度正確に行う必要がありますか?ありがとう。

私はC#+ WPFを使用していますが、上記のコードはxamlの背後にあるC#コードからのものです。

4

1 に答える 1

2

少し混乱しているようです。あなたが与えたコードサンプルに基づいて、TriggerWatcherDllクラスが別のアセンブリにあるという事実は関連していないようです。
実際、クラスの静的プロパティとして IsTriggerOn にアクセスしているように見えるため (使用されている命名に基づいて)、別のスレッドも変更の検出には関係ありません (ただし、競合状態が発生する可能性があります)。

あなたが説明したことから、「他の」DLLにイベントが必要なだけのようです:

class TriggerWatcherDll
{
    public static event EventHandler TriggerChanged;

    private static bool _trigger = false;
    public static bool IsTriggerOn
    {
        get { return _trigger; }
        set
        {
            if (_trigger != value)
            {
                _trigger = value;
                if (TriggerChanged != null)
                    TriggerChanged.Invoke(null, new EventArgs());
            }
        }
    }
}

次に、メイン DLL でイベントをサブスクライブします。

class OtherDll
{
    public OtherDll()
    {
        TriggerWatcherDll.TriggerChanged += TriggerWatcherDll_TriggerChanged;
    }

    void TriggerWatcherDll_TriggerChanged(object sender, EventArgs e)
    {
        if (TriggerWatcherDll.IsTriggerOn)
            System.Windows.Forms.MessageBox.Show("Trigger is ON!");
    }
}

ただし、static の使用を再考する必要があるかもしれません。スレッドの問題については触れていません。

于 2013-02-12T17:20:56.140 に答える