如何使用C#中的线程调用一个带两个参数的函数?我必须从另一个函数调用StartDNIThread(string storeID,string queryObject).我必须传递两个值.它们都是字符串
你的选择是:
后者通常更容易.你还没有展示你在线程中做了什么,但你可能会做以下事情:
string storeID = "...";
string queryObject = "...";
Thread t = new Thread(() => StartDNIThread(storeID, queryObject));
t.Start();
Run Code Online (Sandbox Code Playgroud)
请注意,因为捕获了变量,所以在知道线程实际启动之后才能更改这些值.您可以使用匿名函数仅使用的捕获变量来解决此问题:
string storeID = "...";
string queryObject = "...";
string storeIDCopy = storeID;
string queryObjectCopy = queryObject;
Thread t = new Thread(() => StartDNIThread(storeIDCopy, queryObjectCopy));
t.Start();
// You can now change storeID and queryObject freely
Run Code Online (Sandbox Code Playgroud)
如果你在循环中做任何事情,这一点尤为重要,因为循环变量本身会发生变化.例如:
foreach (string storeID in stores)
{
string storeIDCopy = storeID;
Thread t = new Thread(() => StartDNIThread(storeIDCopy, queryObject));
t.Start();
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用线程池或任何其他方式启动线程,则模式基本相同.
ThreadStart threadStart = delegate{StartDNIThread(string storeID, string queryObject);};
Thread thread = new Thread(threadStart);
thread.Start();
Run Code Online (Sandbox Code Playgroud)
或者使用lambdas:
ThreadStart threadStart = () => StartDNIThread(string storeID, string queryObject);
Thread thread = new Thread(threadStart);
thread.Start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |