Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET ParameteredThreadStart返回类型错误_C#_Multithreading_Parameters_Methods_Return Type - Fatal编程技术网

C# .NET ParameteredThreadStart返回类型错误

C# .NET ParameteredThreadStart返回类型错误,c#,multithreading,parameters,methods,return-type,C#,Multithreading,Parameters,Methods,Return Type,我刚开始尝试线程,遇到了一个我自己无法解决的问题。我发现错误:错误1“bool projekt.ftp.UploadFil(object)”的返回类型错误 public static bool UploadFile(object filename) { string file = Convert.ToString(filename); /* blah blah fricken blah snip */ return false; } 我使用以下代码使用ftp.U

我刚开始尝试线程,遇到了一个我自己无法解决的问题。我发现错误:错误1“bool projekt.ftp.UploadFil(object)”的返回类型错误

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
我使用以下代码使用ftp.Uploadfile方法启动线程:

Thread ftpUploadFile = new Thread(new ParameterizedThreadStart(ftp.UploadFile));
ftpUploadFile.Start(e.FullPath);
public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
这就是我使用的方法

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}

如果阅读错误消息,您会发现问题在于该方法的返回类型错误

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
具体地说,您的
UploadFile
方法返回
bool
,但是
ParameterizedThreadStart
委托返回
void

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
要解决此问题,请将
UploadFile
方法更改为return
void
,并更改其所有
return xxx语句到
返回

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
或者,您可以使用匿名方法包装
UploadFile
,如下所示:

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
Thread ftpUploadFile = new Thread(delegate { ftp.UploadFile(e.FullPath); });
ftpUploadFile.Start();
试一试

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}

您不应该从方法中返回任何内容:

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}

如果您需要了解方法的结果,则需要查看。

我认为
ParameterizedThreadStart
期望使用返回类型为
void
的方法。

使用如下任意委托:

public static bool UploadFile(object filename)
{
    string file = Convert.ToString(filename);

    /* blah blah fricken blah snip */

    return false; 

}
bool result = false;    
ThreadStart s = delegate
{
    result = UploadFile(ftp.UploadFile);
};
Thread t = new Thread(s);
s.Start();
s.Join();
// now you have your result    
if (result)
{ // do something useful
}

您确定您的
lok
对象是线程安全的吗?在运行时,程序将很快到达“if(result)”行。并且您不会从上传文件中获得任何“结果”。