C#WinForm 往线程里传参数的方法总结
来源:互联网 发布:淘宝的面膜是正品吗 编辑:程序博客网 时间:2024/04/29 22:10
Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。
Thread (ThreadStart) 初始化 Thread 类的新实例。
由 .NET Compact Framework 支持。
Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。
Thread (ThreadStart, Int32) 初始化 Thread 类的新实例,指定线程的最大堆栈大小。
由 .NET Compact Framework 支持。
我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。
一、不带参数的
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Threading;
namespace
AAAAAA
{
class
AAA
{
public
static
void
Main()
{
Thread t =
new
Thread(
new
ThreadStart(A));
t.Start();
Console.Read();
}
private
static
void
A()
{
Console.WriteLine(
"Method A!"
);
}
}
}
结果显示Method A!
二、带一个参数的
由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Threading;
namespace
AAAAAA
{
class
AAA
{
public
static
void
Main()
{
Thread t =
new
Thread(
new
ParameterizedThreadStart(B));
t.Start(
"B"
);
Console.Read();
}
private
static
void
B(
object
obj)
{
Console.WriteLine(
"Method {0}!"
,obj.ToString ());
}
}
}
结果显示Method B!
三、带多个参数的
由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Threading;
namespace
AAAAAA
{
class
AAA
{
public
static
void
Main()
{
My m =
new
My();
m.x = 2;
m.y = 3;
Thread t =
new
Thread(
new
ThreadStart(m.C));
t.Start();
Console.Read();
}
}
class
My
{
public
int
x, y;
public
void
C()
{
Console.WriteLine(
"x={0},y={1}"
,
this
.x,
this
.y);
}
}
}
结果显示x=2,y=3
四、利用结构体给参数传值。
定义公用的public struct,里面可以定义自己需要的参数,然后在需要添加线程的时候,可以定义结构体的实例。
//结构体
struct
RowCol
{
public
int
row;
public
int
col;
};
//定义方法
public
void
Output(Object rc)
{
RowCol rowCol = (RowCol)rc;
for
(
int
i = 0; i < rowCol.row; i++)
{
for
(
int
j = 0; j < rowCol.col; j++)
Console.Write(
"{0} "
, _char);
Console.Write(
"\n"
);
}
}
四、利用类给参数传值。
类: public string rowid, id;
Thread thread = new Thread(() => Start_Day(BaseCreatetask));//new Thread(new ThreadStart(Start_Day(BaseCreatetask.BaseCreatetask)));
//将新建的线程加入到自定义线程队列中,以便在窗体结束时关闭所有的线程
ChaosThreadList.Add(thread);
thread.IsBackground = true;
thread.Start();
return;
//获取每天的任务
private void Start_Day(object Base_Createtask)
{
try
{
while (true)
{
//将sleep和无限循环放在等待异步的外面
Thread.Sleep(int.Parse(uptime));//定时执行数据更新
ThreadDayFunction(Base_Createtask);
}
}
catch
{
}
}
private void ThreadDayFunction(object Createtask)
{
try
{
if (this.list.InvokeRequired)//等待异步
{
FlushClient fc = new FlushClient(() => ThreadDayFunction(Createtask));
this.Invoke(fc);//通过代理调用刷新方法
}
else
{
//类对象实例化
类 dd=(类名)Createtask;
}
}
catch
{
}
}
- C#WinForm 往线程里传参数的方法总结
- C#,往线程里传参数的方法总结
- C#,往线程里传参数的方法总结
- C#,往线程里传参数的方法总结
- C#往线程里传参数的方法总结
- 往线程里传参数的方法总结
- 往线程里传参数的方法总结
- C#往线程里传参数的方法
- 关于线程的总结(.net,c#,winform)
- C#往线程里传递参数的方法小结
- Winform 跨线程访问控件的两个方法总结
- 线程的方法里怎么才能带参数?
- C#如何在线程里调用带参数的方法
- C#线程进程总结(线程调用带参数的方法)
- [C#] Winform里调用系统里默认的邮件客户端
- 【C#】40. 线程参数传递的三种方法
- 向线程传递多个参数的变通方法(c#)
- 线程传参数方法
- java方法覆盖允许的条件
- LeetCode 263. Ugly Number
- mysql出现错误“ Every derived table must have its own alias”
- js的filter()使用及查询方法实现
- LeetCode 367. Valid Perfect Square
- C#WinForm 往线程里传参数的方法总结
- 单片机采集的MPU6050原始数据对应关系
- DOM键盘事件
- java字符串格式化String.format()
- 代码很烂,所以离职。
- WebView 加载网页内部video 横向全屏播放问题
- 初识javascript之对象继承
- 《剑指Offer》 不用加减乘除做加法
- Https 升级(free)