如何生成一个参数化线程,该线程将返回C#中的布尔值?
我试图调用一个方法,该方法将通过调用如下线程返回布尔值(-1,0,1):如何生成一个参数化线程,该线程将返回C#中的布尔值?,c#,winforms,multithreading,C#,Winforms,Multithreading,我试图调用一个方法,该方法将通过调用如下线程返回布尔值(-1,0,1): public void CreateThread() { ThreadStart ts =delegate{check(55);}; Thread tUpdateNow = new Thread(ts); tUpdateNow.Start(); //According to the return value perform some task. } public bool check(i
public void CreateThread()
{
ThreadStart ts =delegate{check(55);};
Thread tUpdateNow = new Thread(ts);
tUpdateNow.Start();
//According to the return value perform some task.
}
public bool check(int n)
{
if(n%2==0)
return 1;
else if(n%2>=0)
return 0;
else
return -1;
}
var bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
但是我不知道如何用C实现这个。请任何人帮帮我。
ThreadStart
返回void,因此在您的委托中,您正在调用您的check方法,它正在丢弃返回值。您需要将该值存储在其他位置,然后在线程完成后检查它。ThreadStart
返回void,因此在您的委托中,您调用了check方法,它会丢弃返回值。您需要将该值存储在其他地方,然后在线程完成后检查它。我强烈建议您使用类似的工具。您可以订阅线程完成时将触发的事件。请参阅:
比如:
public void CreateThread()
{
ThreadStart ts =delegate{check(55);};
Thread tUpdateNow = new Thread(ts);
tUpdateNow.Start();
//According to the return value perform some task.
}
public bool check(int n)
{
if(n%2==0)
return 1;
else if(n%2>=0)
return 0;
else
return -1;
}
var bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
您可以将
DoWork
方法的结果存储在DoWorkEventArgs
result属性中。当触发RunWorkerCompleted
事件时,您可以从RunWorkerCompletedEventArgs
result属性检索此结果。我强烈建议您使用类似的方法。您可以订阅线程完成时将触发的事件。请参阅:
比如:
public void CreateThread()
{
ThreadStart ts =delegate{check(55);};
Thread tUpdateNow = new Thread(ts);
tUpdateNow.Start();
//According to the return value perform some task.
}
public bool check(int n)
{
if(n%2==0)
return 1;
else if(n%2>=0)
return 0;
else
return -1;
}
var bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
您可以将
DoWork
方法的结果存储在DoWorkEventArgs
result属性中。当触发RunWorkerCompleted
事件时,您可以从RunWorkerCompletedEventArgs
result属性检索此结果。您可以使用任务并行库,它为您包装了所有这些
Task<bool> task = Task<bool>.Factory.StartNew(() => check(55));
bool result = task.Result;
Task Task=Task.Factory.StartNew(()=>check(55));
bool result=task.result;
您可以使用任务并行库,它为您包装了所有这些
Task<bool> task = Task<bool>.Factory.StartNew(() => check(55));
bool result = task.Result;
Task Task=Task.Factory.StartNew(()=>check(55));
bool result=task.result;
你能给我一些关于任务类的想法吗,比如一些例子,你是什么意思?System.Threading.Tasks.Task类是.Net 4.0中包含的任务并行库的一部分。您可以在这里找到这个库的基本知识:实际上,当我在应用程序中实现它时,它会说一个错误“名称空间中不存在类型或名称空间名称任务”System.Threading“因此,我问了这个问题,你能给我一些关于任务类的想法吗,比如一些例子,你是什么意思?”?System.Threading.Tasks.Task类是.Net 4.0中包含的任务并行库的一部分。您可以在这里找到这个库的基础知识:实际上,当我在应用程序中实现它时,它会说一个错误“类型或名称空间名称任务在名称空间“System.Threading”中不存在”,因此为此,我问了这个问题