public class TestThread
{
public ucTestScriptTree _tree=new ucTestScriptTree ();
public void ForTest(ucTestScriptTree tn)
{
tn.BeginImport(tn.m_node, tn.list);
} private void OnShown(object sender, EventArgs e)
{
////1
//Thread m_Thread = new Thread(new ThreadStart(this.ThreadBeginImport));
//m_Thread.Name = "UpImport_Thread";
//m_Thread.Start(); ////2
//Thread m_Thread = new Thread(new ParameterizedThreadStart(this.ForTest));
//m_Thread.start(_tree); ////3
ThreadPool.QueueUserWorkItem(new WaitCallback(this.ForTest), _tree); }
}分别企图用以上3中方法启动这个带参数的线程,但是都没能成功。直接编译错误请教各位,这个线程应该怎么才可以启动啊~?~先谢谢了~
{
public ucTestScriptTree _tree=new ucTestScriptTree ();
public void ForTest(ucTestScriptTree tn)
{
tn.BeginImport(tn.m_node, tn.list);
} private void OnShown(object sender, EventArgs e)
{
////1
//Thread m_Thread = new Thread(new ThreadStart(this.ThreadBeginImport));
//m_Thread.Name = "UpImport_Thread";
//m_Thread.Start(); ////2
//Thread m_Thread = new Thread(new ParameterizedThreadStart(this.ForTest));
//m_Thread.start(_tree); ////3
ThreadPool.QueueUserWorkItem(new WaitCallback(this.ForTest), _tree); }
}分别企图用以上3中方法启动这个带参数的线程,但是都没能成功。直接编译错误请教各位,这个线程应该怎么才可以启动啊~?~先谢谢了~
//將ForTest修改如下:
public void ForTest(object state)
{
ucTestScriptTree tn = (ucTestScriptTree)state;
tn.BeginImport(tn.m_node, tn.list);
}
//使用下面的代碼即可啟動線程,亦即樓主所列之第二種方法
Thread m_Thread = new Thread(new ParameterizedThreadStart(ForTest));
m_Thread.Start(_tree);
m_Thread.Start( _tree );
public void ForTest( object obj )
{
ucTestScriptTree tn = ( ucTestScriptTree )obj;
tn.BeginImport( tn.m_node, tn.list );
}
{
tn.BeginImport(tn.m_node, tn.list);
} 传进去的已经是一个类的实体了。。为什么就是编译不过呢!?
为什么要通过强转呢!?帮忙再解释下。很快结贴 !
{
public ucTestScriptTree _tree = new ucTestScriptTree();
public void ForTest( object obj )
{
ucTestScriptTree tn = ( ucTestScriptTree )obj;
tn.BeginImport( tn.m_node, tn.list );
} private void OnShown( object sender, EventArgs e )
{
////1
//Thread m_Thread = new Thread( new ThreadStart( this._tree.BeginImport ) );
//m_Thread.Name = "UpImport_Thread";
//m_Thread.Start(); //2
Thread m_Thread = new Thread( new ParameterizedThreadStart( this.ForTest ) );
m_Thread.Start( _tree ); ////3
ThreadPool.QueueUserWorkItem( new WaitCallback( this.ForTest ), _tree ); }
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;namespace StringReverse
{
class Program
{
//public delegate void ThreadStart();
static void Main(string[] args)
{
Reverse rs = new Reverse();
rs.str1 = "abcd";
rs.str2 = "efg";
Console.Write("转换前的字符串{0}",rs.str1+rs.str2);
Thread t = new Thread(new ThreadStart(rs.ReverseMethod));
t.Start();
Console.Read();
}
} class Reverse
{
public string str1;
public string str2;
public void ReverseMethod()
{
List<string> strArray1 = new List<string>();
List<string> charArray2 = new List<string>();
for (int i = str1.Length-1; i >= 0; i--)
{
strArray1.Add(str1[i].ToString());
}
for (int j = str2.Length-1; j >= 0; j--)
{
charArray2.Add(str2[j].ToString());
}
StringBuilder temp = new StringBuilder();
foreach (string str in charArray2)
{
temp.Append(str);
} foreach (string s in strArray1)
{
temp.Append(s);
}
//returnStr = temp.ToString();
Console.WriteLine("\n更换位置后的字符串{0}", temp.ToString());
}
}}
public void OnShown(ucTestScriptTree aTree)
{
Thread trd = new Thread(new ParameterizedThreadStart(this.Test));
trd.Start(aTree);
}private void Test(Object aObj)
{
ucTestScriptTree tree = aObj as ucTestScriptTree;
if (tree == null)
return; tree.BeginImport(tree.m_node, tree.list);
}
{
tn.BeginImport(tn.m_node, tn.list);
} 传进去的已经是一个类的实体了。。为什么就是编译不过呢!?
为什么要通过强转呢!? 帮忙再解释下。 很快结贴 !
----------------------------------
ParameterizedThreadStart是一個委托,而在此程序中ForTest是該委托的實現,ParameterizedThreadStart委托聲明的是傳入一個Object參數,因此ForTest也必須是一個Object參數
//这是ParameterizedThreadStart的定义
public delegate void ParameterizedThreadStart (Object obj}//它是个delegate
//也就 是说
Thread m_Thread = new Thread(new ParameterizedThreadStart(这里用的函授数必须是和ParameterizedThreadStart定义是一样的));//所以ForTest要定义成这样
public void ForTest( object obj ) //这样一来ForTest里面自然要对obj强制转换了