应为C#方法名称
本文关键字:方法 应为 | 更新日期: 2023-09-27 18:20:08
我只是想传递一些值,但它总是抛出一个错误。有人能纠正我在这里遗漏了什么吗?
这里有错误
Thread t_PerthOut = new Thread(new ThreadStart(ReadCentralOutQueue("test"));
我想把这个字符串值传递给ReadCentralOutQueue
。
class Program
{
public void Main(string[] args)
{
Thread t_PerthOut = new Thread(new ThreadStart(ReadCentralOutQueue("test"));
t_PerthOut.Start();
}
public void ReadCentralOutQueue(string strQueueName)
{
System.Messaging.MessageQueue mq;
System.Messaging.Message mes;
string m;
while (true)
{
try
{
}
else
{
Console.WriteLine("Waiting for " + strQueueName + " Queue.....");
}
}
}
catch
{
m = "Exception Occured.";
Console.WriteLine(m);
}
finally
{
//Console.ReadLine();
}
}
}
}
此代码:
Thread t_PerthOut = new Thread(new ThreadStart(ReadCentralOutQueue("test"));
尝试调用ReadCentralOutQueue
和,然后根据结果创建委托。这是行不通的,因为这是一种无效的方法。通常,您会使用方法组来创建委托,或者使用匿名函数(如lambda表达式)。在这种情况下,lambda表达式将是最简单的:
Thread t_PerthOut = new Thread(() => ReadCentralOutQueue("test"));
不能只使用new Thread(ReadCentralOutQueue)
,因为ReadCentralOutQueue
与ThreadStart
或ParameterizedThreadStart
的签名不匹配。
重要的是,你要了解为什么你会得到这个错误,以及如何修复它。
编辑:为了证明确实有效,这里有一个简短但完整的程序:
using System;
using System.Threading;
class Program
{
public static void Main(string[] args)
{
Thread thread = new Thread(() => ReadCentralOutQueue("test"));
thread.Start();
thread.Join();
}
public static void ReadCentralOutQueue(string queueName)
{
Console.WriteLine("I would read queue {0} here", queueName);
}
}
你必须这样做:
var thread = new Thread(ReadCentralOutQueue);
thread.Start("test");
此外,ParameterizedThreadStart
需要一个以object
为参数的委托,因此您需要将签名更改为:
public static void ReadCentralOutQueue(object state)
{
var queueName = state as string;
...
}
参数不允许作为ThreadStart委托的一部分。将参数传递给新线程还有其他几种解决方案,如下所述:http://www.yoda.arachsys.com/csharp/threads/parameters.shtml
但在您的情况下,可能最简单的方法是匿名方法:
ThreadStart starter = delegate { Fetch (myUrl); };
new Thread(starter).Start();