kaharas
kaharas

Reputation: 607

Make dispatcher example to work

I'm trying to make a working program from this example: http://msdn.microsoft.com/en-us/library/ms741870.aspx . I think I'm almost done, but I can't who shold be calling the Dispatcher : what should i use instead of tomorrow.Dispatcher.BeginInvoke ? I think I should put the UI thread, but how can i do that?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace TestDelegate
{
    public partial class Form1 : Form
    {
        private delegate void NoArgDelegate();
        private delegate void OneArgDelegate(String arg);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Change the status image and start the rotation animation.
            button1.Enabled = false;
            button1.Text = "Contacting Server";

            // Start fetching the weather forecast asynchronously.
            NoArgDelegate fetcher = new NoArgDelegate(
                this.FetchWeatherFromServer);
            fetcher.BeginInvoke(null, null);
        }


        private void FetchWeatherFromServer()
        {
            Thread.Sleep(4000);        


            // Schedule the update function in the UI thread.
            tomorrow.Dispatcher.BeginInvoke(
                System.Threading.ThreadPriority.Normal,
                new OneArgDelegate(UpdateUserInterface), 
                weather);
        }

        private void UpdateUserInterface(String weather)
        {    
            //Update UI text
            button1.Enabled = true;
            button1.Text = "Fetch Forecast";  
        }
    }
}

Upvotes: 0

Views: 19086

Answers (3)

infografnet
infografnet

Reputation: 4005

In Windows Forms you can just use this.BeginInvoke(...).

It is a method of Control class, and Form derives from Control.

Upvotes: 2

Mervin
Mervin

Reputation: 1103

The problem is in the referencing, Dispatcher as introduced in .NET framework 3 and up is located in the System.Windows.Threading namespace and not in System.Threading .

The System.Windows namespace is available in WPF (Windows Presentation Foundation) projects.

Upvotes: 1

Dmitri Nesteruk
Dmitri Nesteruk

Reputation: 23789

How about this.Dispatcher.Invoke(...)?

Upvotes: 0

Related Questions