2015-07-13 180 views
0

我是新來的C#和多線程。我有這個代碼來開始使用多線程,但時鐘滴答沒有開始。這段代碼有什麼問題?沒有錯誤發生,因爲我猜想它是一個邏輯錯誤。任何幫助,將不勝感激。線程未啓動

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Threading; 
namespace Implementing_Databases 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      picturebox1.Location=new Point(0,20); 
      pictureBox2.Location = new Point(0, 60); 
     } 
     int B1 = 0; 
     int B2 = 0; 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      Thread Th1 = new Thread(Go1); 
      Thread Th2 = new Thread(Go2); 
      Th1.Start(); 
      Th2.Start(); 

     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 

      picturebox1.Left = B1; 
      B1 += 5; 

     } 

     private void timer2_Tick(object sender, EventArgs e) 
     { 

      pictureBox2.Left = B2; 
      B2 += 5; 

     } 
     void Go1() 
     { 
      timer1.Start(); 
     } 
     void Go2() 
     { 
      timer2.Start(); 
     } 




    } 
} 
+0

我沒有看到任何定時器聲明? –

+0

我使用了工具箱中的計時器。我猜這是背景聲明? – wish568

+0

爲什麼不從'Form1_Load'方法調用'timer1.Start()'。在'Thread'中包裝它在這種情況下不會存檔。 – Dzienny

回答

0

首先,嘗試將線程聲明爲屬性的形式,而不是將它們聲明爲本地函數變量。因爲否則它們可能會在Load處理程序退出後立即被GC收集。

其次,UI不更新可能是由於您無法從非GUI線程更新UI數據。請參閱WinForms編程的InvokeRequired/Invoke功能。有關更多詳細信息,請參見https://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired(v=vs.110).aspx

+0

他只是從後臺線程啓動計時器。 –

+0

刻度回調將由計時器線程調用。哪些不是GUI – ninjaboy

+0

我曾嘗試將這些線程聲明爲Form的屬性。仍然沒有收穫。 – wish568