我創建了以下項目,向您展示我打算如何做事。但是我的主要項目會更大,並且會有多個班級。我只是想讓這個工作正常,所以我知道我在編碼時使用了很好的做法。所以我的表單有一個名爲「button1」的按鈕和一個名爲「textBox1」的文本框,我有一個名爲「Class1」的類,它有一個方法「testtest()」,我只是將Thread.Sleep放在testtest方法中,以便我可以找到它在另一個線程上運行。C#多線程多類gui應用程序,我正在做對嗎?
這裏是我的表單代碼
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;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
delegate void Class1Deligate();
private void button1_Click(object sender, EventArgs e)
{
Class1 c = new Class1();
Class1Deligate testMethod = new Class1Deligate(c.testtest);
testMethod.BeginInvoke(endTestMethod, testMethod);
}
void endTestMethod(IAsyncResult ar)
{
}
}
}
,這裏是我的一個類代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
class Class1
{
public void testtest()
{
Thread.Sleep(8888);
MessageBox.Show("Done");
}
}
}
我是否正確地創建一個新線程?有人可以告訴我如何從class1中的testtest方法在運行時更新textbox1嗎?我做了一個早期的文章,並被告知使用Dispatcher,但出於某種原因,似乎Dispatcher類不適用於我。
問候
我不確定我是否需要一個新線程,因爲在某些示例中,我看到使用了Thread類,而在另一些示例中我看到使用了BeginInvoke,所以它真的讓我困惑。 – Arya 2010-10-31 03:50:23
@Arya:那麼一些開始一個新的線程,一些使用backgroundworker,一些使用ThreadPool。您需要確定在您使用它時最適合的方式。所有的方法都有其優點和缺點。 – Patrick 2010-10-31 11:09:57