Winforms à la conversion WPF: BeginInvoke à quoi?

Voici mon ancien code de WinForms:

    private void ValueChanged(double inValue1, double inValue2) {
        //only manual mode for this driver, so that's easy.
        if (ValueLabel.InvokeRequired) {
            ValueLabel.Invoke(new MethodInvoker(delegate {
                ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
            }
                ));
        }
        else {
            ValueLabel.Text = (inValue1* inValue2/ 1000).ToString("f1");
        }
    }

Est-il un moyen facile de convertir ce WPF amical? Jusqu'à présent, j'ai:

   private void KVPValueChanged(double inValue1, double inValue2) {
        if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread){
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        } else {
            ValueLabel.Dispatcher.BeginInvoke(delegate {
                ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
            });
        }
    }

Mais que la deuxième "délégué" échec de l'appel. Comment puis-je invoquer ce délégué? Je suppose que je peux aller à travers l'ensemble de la fabrication d'un délégué de la méthode, de faire un exemple de la méthode du délégué, en invoquant ce cas particulier, etc, mais je pensais que le point de l'ensemble de ces délégués anonymes était d'éviter que des tracas. De Plus, mon vieux winforms code a d'abord mise en œuvre dans tous les sens, donc je voudrais vraiment éviter d'avoir à dé-anonymiser tous mes délégués.

Edit: je peux essayer d'utiliser la MethodInvoker, comme je l'étais avant, mais alors le compilateur devient confus. MethodInvoker est la partie du Système.De Windows.Formes, donc, en utilisant cette approche ne fonctionne pas. Comme dans:

    private void ValueChanged(double inValue1, double inValue2) {
        if (ValueLabel.Dispatcher.Thread == Thread.CurrentThread) {
            ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
        }
        else {
            ValueLabel.Dispatcher.BeginInvoke(new System.Windows.Forms.MethodInvoker(delegate {
                ValueLabel.Content = (inValue1* inValue2/ 1000).ToString("f1");
            }));
        }
    }

Que l'utilisation de MethodInvoker n'est pas casher. Est-il distinct de la mise en œuvre, ou de quelque autre façon à utiliser le même comportement?

source d'informationauteur mmr