我有以下(简化)代码:
preg_replace('/\[caption\b.*?\]©.*?\[\/caption\]/su',"",$string);
我的问题是,在MailMessage message = GetMailMessage();
ProcessEmail(() => SendEmail(message));
private void ProcessEmail(Action Method) {
try {
ThreadPool.QueueUserWorkItem(new WaitCallback(?));
} catch (Exception ex) {
}
}
private static void SendEmail(object message) {
// send email
}
中,我可以将名为Method的Action参数传递给ProcessEmail
方法吗?
任何帮助都非常感激。
答案 0 :(得分:3)
不,但你可以这样做:
ThreadPool.QueueUserWorkItem(new WaitCallback(state=>{Method();}));
或更简洁:
ThreadPool.QueueUserWorkItem(state=>{Method();});
基本上,您提供了一个新的匿名函数回调,可以调用您的Method()
回调。
答案 1 :(得分:0)
我更喜欢这种技巧:
ThreadPool.QueueUserWorkItem(nameOfAnonymousMethod =>
{
Method(...);
});
答案 2 :(得分:0)
我认为您需要使用autoresetevent或manualresetevent。
简单代码:
public class Test
{
private AutoResetEvent _eventWaitThread = new AutoResetEvent(false);
private void Job()
{
Action act = () =>
{
try
{
// do work...
}
finally
{
_eventWaitThread.Set();
}
};
ThreadPool.QueueUserWorkItem(x => act());
_eventWaitThread.WaitOne(10 * 1000 * 60);
}
}