开发者

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";  
        }
    }
}


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

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


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.


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜