[英]Threading in Java vs. C#
对于我困惑的事情,我需要一点确认。 我知道线程在Java中是如何工作的:
new DialList(string a , string b).start(); // where DialList is a class
public class DialList extends Thread {
public DialList(String a, string b) {
FilePath = a;
ThreadLogFile = b";
}
public void run() {
// some code to run in different thread
}
}
现在,我想在C#中运行相同的代码。 我应该将run()中的代码放入方法中,然后执行以下操作:
Thread t = new Thread (runcsharp); // Kick off a new thread
t.Start();
static void runcsharp(parameters) {
// code
}
还是有其他方法可以做到?
我有一些观察:
首先,尽管您在Java中创建线程的方法可行,但建议的方法是实现Runnable
而不是扩展Thread
。 这为您提供了在哪里可以使用相同代码的更多灵活性,例如,您还可以将其提供给ExecutorService
。
new Thread(new DialList(string a , string b)).start();
public class DialList implements Runnable {
public DialList(String a, string b) {
FilePath = a;
ThreadLogFile = b";
}
public void run() {
// some code to run in different thread
}
}
其次,是的,您可以在C#中使用该代码段,也可以使用lambda表达式:
Thread t = new Thread(
o =>
{
// code
});
t.Start();
C#中的Lambda比Java中的匿名类更强大,因为您可以修改捕获的变量。 这可能很方便,但也是脚下射击的好方法。
有几种不同的方法可以在C#中启动新线程。 例如:
static void run()
{
Thread t = new Thread(new ThreadStart(WriteY));
t.Start(); // Run WriteY on the new thread.
}
void WriteY()
{
// do something
}
请注意,这假设WriteY
没有参数。 如果确实如此,则必须使用ParameterizedThreadStart委托。 有关详细信息,请参见Joe Albahari的优秀(免费) 电子书 。
编辑:如果我正确理解这一点,则您有一个想要传递给新线程的DialList
类型的对象。 您可以通过C#这样实现:
void WriteY(DialList dl)
{ // do something with the DialList
}
var dl = new DialList(AString, BString);
Thread T = new Thread( () => WriteY(dl) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.