C# .NET ParameteredThreadStart返回类型错误
我刚开始尝试线程,遇到了一个我自己无法解决的问题。我发现错误:错误1“bool projekt.ftp.UploadFil(object)”的返回类型错误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
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
方法更改为returnvoid
,并更改其所有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)”行。并且您不会从上传文件中获得任何“结果”。