我是c#的新手,我想在下面的脚本中弄清楚我做错了什么。我为" del" "方法名称预期" >代表。明确定义了 getUrlThread 方法,并且委托 del 指向它,为什么它没有被看到?谢谢。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
namespace updateNewFrontEnd
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
// define function pointer
// =======================
public delegate string getUrlThreadDelegate(string targetUrl);
// define function for the function pointer
// ========================================
public string getUrlThread(string targetUrl)
{
httpRequestClass urlResponseText = new httpRequestClass();
urlResponseText.TargetUrl = targetUrl;
string text = urlResponseText.getUrlResponse();
return text;
}
private void btnUrl_Click(object sender, EventArgs e)
{
// top decalrations
// ================
.... some code here....
string targetUrl = "some string here...";
// instantiate the HTTP call object to the "targetUrl" url
// =======================================================
getUrlThreadDelegate del = new getUrlThreadDelegate(getUrlThread);
Thread t1 = new Thread(new ThreadStart(del(targetUrl))); // ERROR HERE !!!
t1.Start();
.... some more code here....
}
}
}
答案 0 :(得分:2)
目前还不是很清楚你想要实现的目标,但目前你在这里呼叫 del
:
new Thread(new ThreadStart(del(targetUrl)))
你有一个根本问题 - 你试图调用的方法没有ThreadStart
(void
无参数委托)的正确签名。目前还不清楚你想对getUrlThread
返回的响应做什么,但你可以使用lambda表达式来更简单地调用方法,而无需声明自己的委托类型:
Thread t1 = new Thread(() => getUrlThread(targetUrl));
t1.Start();
这将获取值 - 但随后扔掉它。
作为一个 - 但重要的一个 - 如果您遵循.NET命名约定,它将真正帮助您的代码的可读性。命名空间,类型和方法名称应为PascalCased
,而不是camelCased
。
此外,如果您使用的是.NET 4.0或更高版本,则可能需要考虑使用async
/ await
...或至少使用Task<T>
。