30. april 2005 - 14:08
Der er
5 kommentarer og 2 løsninger
Hvordan benytter jeg en tråd i min button_click funktion?
Hej Jeg har forsøgt at oprette en form med 2 knapper. Jeg vil bruge 2 tråde til at køre 2 forskellige funktioner afhængigt af hvilken knap jeg trykker på. Trykkes der på knap nr 1. skal den starte tråd 1 og deaktivere tråd 2. Men hvordan gøres det? Som i kan se af min kode opretter jeg de to tråde og starter dem i button_click funktionerne, men den går ikke. Hvordan ligger jeg dem udenfor funktionerne og benytter Thread.Start() inden i funktionerne. Det er nok noget med at sende tråd objektet med som reference. Mvh AHR ******* Min Kode ******* using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namespace simpeltTest { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label label1; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> public void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(24, 200); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Location = new System.Drawing.Point(24, 160); this.button2.Name = "button2"; this.button2.TabIndex = 1; this.button2.Text = "button2"; this.button2.Click += new System.EventHandler(this.button2_Click); // // label1 // this.label1.Location = new System.Drawing.Point(136, 184); this.label1.Name = "label1"; this.label1.TabIndex = 2; this.label1.Text = "Counter"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.label1); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Form1 myform=new Form1(); //myform.ShowDialog(); Application.Run(myform); } public void threadMetodeOne() { int counter=0; while(counter<10) { label1.Text = counter.ToString(); label1.Refresh(); Thread.Sleep(1000); counter++; } } public void threadMetodeTwo() { label1.Text = "Nulstillet"; } private void button1_Click(object sender, System.EventArgs e) { Thread taeller = new Thread(new ThreadStart(threadMetodeOne)); taeller.Start(); } private void button2_Click(object sender, System.EventArgs e) { Thread nulstil = new Thread(new ThreadStart(threadMetodeTwo)); nulstil.Start(); } } }
Annonceindlæg tema
30. april 2005 - 15:15
#1
Kan du ikke lave de to tråde til globale variable, initialisere dem i constructoren, og så nøjes med at kalde start() i click funktionerne?
30. april 2005 - 16:17
#2
Kan du vise mig hvordan i min kode?
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namespace simpeltTest { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label label1; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; private Thread taeller; private Thread nulstil; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); taeller = new Thread(new ThreadStart(threadMetodeOne)); nulstil = new Thread(new ThreadStart(threadMetodeTwo)); // // TODO: Add any constructor code after InitializeComponent call } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> public void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(24, 200); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Location = new System.Drawing.Point(24, 160); this.button2.Name = "button2"; this.button2.TabIndex = 1; this.button2.Text = "button2"; this.button2.Click += new System.EventHandler(this.button2_Click); // // label1 // this.label1.Location = new System.Drawing.Point(136, 184); this.label1.Name = "label1"; this.label1.TabIndex = 2; this.label1.Text = "Counter"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.label1); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Form1 myform=new Form1(); //myform.ShowDialog(); Application.Run(myform); } public void threadMetodeOne() { int counter=0; while(counter<10) { label1.Text = counter.ToString(); label1.Refresh(); Thread.Sleep(1000); counter++; } } public void threadMetodeTwo() { label1.Text = "Nulstillet"; } private void button1_Click(object sender, System.EventArgs e) { taeller.Start(); } private void button2_Click(object sender, System.EventArgs e) { nulstil.Start(); } } } Jeg gjorde bar det spif2001 sagde... Vær så god
Du skal så stoppe det andet tråd... Men vil du helt afslutte den eller vil du bare pause den. Hvis du skal afslutte den så kan du gøre følgenede under Click handlerne: private void button1_Click(object sender, System.EventArgs e) { nulstil.Abort(); taeller.Start(); } private void button2_Click(object sender, System.EventArgs e) { tealler.Abort(); nulstil.Start(); } Eller hvis du kun vil pause trådene og starte dem igen: private void button1_Click(object sender, System.EventArgs e) { nulstil.Suspend(); taeller.Resume(); } private void button2_Click(object sender, System.EventArgs e) { tealler.Suspend(); nulstil.Resume(); }
Tak for hjælpen og et svar fra dig så er der point
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.