如何生成一个参数化线程,该线程将返回C#中的布尔值?

如何生成一个参数化线程,该线程将返回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

我试图调用一个方法,该方法将通过调用如下线程返回布尔值(-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(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”中不存在”,因此为此,我问了这个问题