Laden...

UI Update aus einem Thread mit CompactFramework

Erstellt von nxexoxn vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.278 Views
N
nxexoxn Themenstarter:in
7 Beiträge seit 2012
vor 12 Jahren
UI Update aus einem Thread mit CompactFramework

Beschreibung:

Beispiel-Anwendung im CompactFramework, die mit Threads arbeitet, um dem Benutzer anzuzeigen, dass ein Prozess in Bearbeitung ist, bzw. dass die Anwendung im Moment keine Eingaben entgegen nimmt:


using System;

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

namespace SmartDeviceProject1
{
    public partial class Form1 : Form
    {
        private bool Working = true;
        private delegate void MethodInvoker();

        public Form1()
        {
            InitializeComponent();
        }

        private void ProgressBarWorking()
        {
            try
            {
                while (Working)
                {
                    for (int i = 0; i < 100; i++)
                    {
                        Invoke((MethodInvoker)delegate()
                        {
                            progressBar1.Value = i;
                        });

                        Thread.Sleep(50);
                    }
                }
            }
            catch { }
        }

        private void Label1Working()
        {
            try
            {
                while (Working)
                {
                    Invoke((MethodInvoker)delegate()
                    {
                        switch (label1.Text)
                        {
                            case "/":
                                label1.Text = "\\";
                                break;
                            case "\\":
                                label1.Text = "/";
                                break;
                        }
                    });

                    Thread.Sleep(100);
                }
            }
            catch { }
        }

        private void Label2Working()
        {
            try
            {
                while (Working)
                {
                    Invoke((MethodInvoker)delegate()
                    {
                        if (label2.BackColor == Color.Red)
                            label2.BackColor = Color.Gray;
                        else
                            if (label2.BackColor == Color.Gray)
                                label2.BackColor = Color.Red;
                    });

                    Thread.Sleep(500);
                }
            }
            catch { }
        }

        private void FormWorking()
        {
            try
            {
                while (Working)
                {
                    Invoke((MethodInvoker)delegate()
                    {
                        switch (this.Text)
                        {
                            case ".":
                                this.Text = "..";
                                break;
                            case "..":
                                this.Text = "...";
                                break;
                            case "...":
                                this.Text = "....";
                                break;
                            case "....":
                                this.Text = ".....";
                                break;
                            case ".....":
                                this.Text = "......";
                                break;
                            case "......":
                                this.Text = ".";
                                break;
                        }
                    });

                    Thread.Sleep(500);
                }
            }
            catch { }
        }

        private void Form1_Closing(object sender, CancelEventArgs e)
        {
            Working = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Thread ProgressBarThread = new Thread(new ThreadStart(ProgressBarWorking));
            ProgressBarThread.Priority = ThreadPriority.Lowest;
            ProgressBarThread.Start();

            Thread Label1Thread = new Thread(new ThreadStart(Label1Working));
            Label1Thread.Priority = ThreadPriority.Lowest;
            Label1Thread.Start();

            Thread Label2Thread = new Thread(new ThreadStart(Label2Working));
            Label2Thread.Priority = ThreadPriority.Lowest;
            Label2Thread.Start();

            Thread FormThread = new Thread(new ThreadStart(FormWorking));
            FormThread.Priority = ThreadPriority.Lowest;
            FormThread.Start();
        }
    }
}

Hier auch als Visual Studio 2008 Projekt zum Download: http://www.autoid.de.tl/thread-.-~-.-example.htm

Schlagwörter: Thread, CompactFramework, Windows CE, mobile