Sobre parâmetros de thread (2.0), "valor de retorno" e suspensão de thread
1. Parâmetros do tópico:
Às vezes você deseja passar algumas informações para o thread auxiliar. Aqui você precisa usar
o exemplo do delegado ParameterizedThreadStart:
private void btRunThread_Click(object
sender, EventArgs e)
{
Thread t = new Thread(new ParameterizedThreadStart(this.ThreadRun));
(100
);
private void ThreadRun(objeto o)
{
this.lbCompleted.Invoke((MethodInvoker)delegate { this.lbCompleted.Text = System.Convert.ToString(o); } })
;
2. Funções semelhantes podem ser alcançadas aproximadamente por meio de proxies. Exemplo:
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass(new MyDlg(DlgMethod))
; ThreadRun ));
Console.WriteLine(
"segundo thread concluído");
thread.Start
(
)
;
private static void DlgMethod(int i)
{
Console.WriteLine
("Resultado do segundo thread:{0}", i)
;
delegado público void MyDlg(int i);
class ThreadClass
{
privado MyDlg meuDlg;
public ThreadClass(MyDlg pDlg)
{
this.myDlg = pDlg
}
public void ThreadRun()
{
int total = 0;
for (int i = 0; i < 100; i++)
{
total += i
}
if (meuDlg!
=
nulo)
{
meuDlg
(total)
;
3. Suspensão de threads:
(1) Método .join
Notas do MSDN: Enquanto continua a executar o processamento padrão da bomba de mensagens COM e SendMessage, o thread de chamada é bloqueado até que um thread termine.
Fiquei confuso e tentei sozinho. Parece que depois que o thread chama o método join, o thread aproveita todo o tempo da CPU até que a tarefa do thread seja concluída. Não sei se é esse o caso?
(2). O método abort
encerra imediatamente o thread
(3). Exemplo de definição do identificador
:
class
Program
{
privatestatic
bool
stop;
Tópico t = novo Thread(new ThreadStart(ThreadRun
)
)
;
Console.Leitura()
;
static void ThreadRun()
{
while (!stop)
{
Console.WriteLine
("
Faça algum trabalho...")
;
http://www.cnblogs.com/KissKnife/archive/2006/10/03/520463.html