New Thread没有从同一名称空间中看到提供的方法

时间:2014-09-09 22:55:57

标签: c#

我是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....

        }

    }
}

1 个答案:

答案 0 :(得分:2)

目前还不是很清楚你想要实现的目标,但目前你在这里呼叫 del

new Thread(new ThreadStart(del(targetUrl)))

你有一个根本问题 - 你试图调用的方法没有ThreadStartvoid无参数委托)的正确签名。目前还不清楚你想对getUrlThread返回的响应做什么,但你可以使用lambda表达式来更简单地调用方法,而无需声明自己的委托类型:

Thread t1 = new Thread(() => getUrlThread(targetUrl));
t1.Start();

这将获取值 - 但随后扔掉它。

作为一个 - 但重要的一个 - 如果您遵循.NET命名约定,它将真正帮助您的代码的可读性。命名空间,类型和方法名称应为PascalCased,而不是camelCased

此外,如果您使用的是.NET 4.0或更高版本,则可能需要考虑使用async / await ...或至少使用Task<T>