Appel de méthode sur le thread GUI à partir d'un minuteries fil

Dans mon application j'utilise un timer pour vérifier les mises à jour d'un flux RSS, si de nouveaux éléments sont découvert que j'avais une fenêtre de dialogue personnalisée pour informer l'utilisateur. Quand je lance le vérifier manuellement tout fonctionne très bien, mais lors de l'enregistrement automatique s'exécute dans le minuteries événement Écoulé le dialogue personnalisée n'est pas affiché.

Tout d'abord est-ce un thread en question? (Je suppose que c'est parce que à la fois le manuel et automatique cochez la case utiliser le même code).

Quand je lance l'enregistrement automatique, dois-je appeler la méthode qui exécute le contrôle de la Minuteries Écoulé gestionnaire d'événement?

Est-il quelque chose que je dois faire dans ma classe de boîte de dialogue personnalisée?

Edit:
c'est une application winforms.

Voici un exemple de ce que le code est comme. (Merci de ne pas remarquer les erreurs de syntaxe dans cet exemple de code, c'est juste un exemple simple, pas de code réel).

public class MainForm : System.Windows.Forms.Form
{
    //This is the object that does most of the work.
    ObjectThatDoesWork MyObjectThatDoesWork = new ObjectThatDoesWork(); 
    MyObjectThatDoesWork.NewItemsFound += new NewItemsFoundEventHandler(Found_New_Items);

    private void Found_New_Items(object sender, System.EventArgs e)
    {
        //Display custom dialog to alert user.
    }

    //Method that doesn't really exist in my class, 
    //but shows that the main form can call Update for a manual check.
    private void Button_Click(object sender, System.EventArgs e)
    {
        MyObjectThatDoesWork.Update();
    }

    //The rest of MainForm with boring main form stuff
}


public class ObjectThatDoesWork
{
    System.Timers.Timer timer;

    public ObjectThatDoesWork()
    {
        timer = new System.Timers.Timer();
        timer.Interval = 600000;
        timer.AutoReset = true;
        timer.Elapsed += new new System.Timers.ElapsedEventHandler(TimeToWork);
        timer.Start();
    }

    private void TimeToWork(object sender, System.Timers.ElapsedEventArgs e)
    {
        Update();
    }

    public void Update()
    {
        //Check for updates and raise an event if new items are found.
        //The event is consumed by the main form.
        OnNewItemsFound(this);
    }

    public delgate void NewItemsFoundEventHandler(object sender, System.EventArgs e);
    public event NewItemsFoundEventHandler NewItemsFound;
    protected void OnNewItemsFound(object sender)
    {
        if(NewItemsFound != null)
        {
            NewItemsFound(sender, new System.EventArgs());
        }
    }
}

Après avoir lu certains commentaires et réponses, je pense que mon problème est que je suis à l'aide d'un System.Timers.Timer pas un System.Windows.Forms.Timer.

EDIT:

Après changer de Formes.Minuterie d'analyse initiale semble bon (mais pas de nouveaux éléments existent encore et n'ont pas vu la boîte de dialogue personnaliser). J'ai ajouté un peu de code pour afficher l'ID de thread à un fichier lors de la mise à jour de la méthode est appelée. À l'aide de la minuterie.Minuterie de l'ID de thread n'était pas le thread GUI, mais en utilisant les Formulaires.Minuterie de l'ID de thread est le même que le GUI.

Yep, c'est un problème thread - mais la réponse dépend si vous êtes en utilisant WPF ou WinForms: qui est-il?
Et je suis surpris que vous ne voyez pas toutes les exceptions: quelle est la version de .NET exécutez-vous? Pouvez-vous montrer un exemple de code?
Pouvez-vous s'il vous plaît poster le code ?
Si vous faites glisser et déposez le Système.Les minuteries.La minuterie de la boîte à outils sur la forme il va automatiquement déclencher des événements sur le thread GUI. Voir l'article que j'ai lié dans ma réponse.
ObjectThatDoesWork ne définit pas NewItemsFound. Poster le code serait beaucoup plus facile pour vous aider à

OriginalL'auteur Tester101 | 2010-10-18