如何将参数传递给Thread.ThreadStart()C#中的方法?
假设我有一个名为'download'的方法
public void download(string filename)
{
// download code
}
Run Code Online (Sandbox Code Playgroud)
现在我在main方法中创建了一个线程:
Thread thread = new Thread(new ThreadStart(download(filename));
Run Code Online (Sandbox Code Playgroud)
错误方法类型预期.
如何ThreadStart使用参数将参数传递给目标方法?
订阅活动有两种基本方式:
SomeEvent += new EventHandler<ArgType> (MyHandlerMethod);
SomeEvent += MyHandlerMethod;
Run Code Online (Sandbox Code Playgroud)
有什么区别,什么时候我应该选择一个而不是另一个?
编辑:如果它是相同的,那么为什么VS默认为长版本,使代码混乱?这对我来说毫无意义.
我有一个简单的问题:实例化C#委托与仅传递函数引用相比有什么好处?我的意思是:
为什么:
Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod));
Run Code Online (Sandbox Code Playgroud)
当你能做到:
Thread t = new Thread(SomeObject.SomeMethod);
Run Code Online (Sandbox Code Playgroud)
两者都会根据我的经验编译和工作......我错过了什么?
可能重复:
新的Thread(void Target())和新的Thread(新的ThreadStart(void Target())之间有什么区别?)
我有一个关于Thread类的小问题.这个类有4个构造函数:
public Thread(ParameterizedThreadStart start);
public Thread(ThreadStart start);
public Thread(ParameterizedThreadStart start, int maxStackSize);
public Thread(ThreadStart start, int maxStackSize);
Run Code Online (Sandbox Code Playgroud)
我使用第二个构造函数来创建一个Thread对象:
Thread thread = new Thread(new ThreadStart(ScanDirectory));
Run Code Online (Sandbox Code Playgroud)
但是,我可以使用一种方法来创建这个对象,而不使用我上面提到的任何构造函数.
Thread thread = new Thread(ScanDirectory);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,ScanDirectory是一个void方法,它不是ThreadStart或ParameterizedThreadStart,但Thread类仍然接受此构造函数.为什么?我认为这是一个.NET功能,但我不知道它是如何实现的.
注意: ScanDirectory是一种void方法.
可能重复:
为什么使用"new DelegateType(Delegate)"?
新的Thread(void Target())和新的Thread(新的ThreadStart(void Target()))有什么区别?
所以我经历了一些委托,并以某种方式获得了整个想法.现在,我看到处都像这样:
public delegate void Deleg();
Deleg deleg = new Deleg(FunctionName);
deleg();
Run Code Online (Sandbox Code Playgroud)
我认为这会创建一个委托对象,其函数指向作为参数传递给构造函数.
现在,我也可以这样做:
public delegate void Deleg();
public Deleg deleg;
deleg = FunctionName;
deleg();
Run Code Online (Sandbox Code Playgroud)
这个似乎只创建一个引用,并传递函数的地址.这工作原理相同,并具有所有委托功能.
但是现在,无论事实上我在第二个例子中还有一行,我实际上是否会因为第一个在教程中更受欢迎而失去或获得一些东西?