назовите eventhandler с аргументами

Единственная ситуация, в которой неназванное пространство имен в заголовке может быть полезным, состоит в том, когда Вы хотите распределить код как заголовочные файлы только. Например, большое автономное подмножество Повышения является просто заголовками.

маркер ignore для кортежей, упомянутых в другом ответе, является одним примером, _1, _2 и т.д. связывают заполнителей, другие.

12
задан i_am_jorf 28 September 2009 в 16:55
поделиться

3 ответа

Самый простой способ сделать это - использовать анонимную функцию (анонимный метод или лямбда-выражение) для подписки на событие , затем сделайте так, чтобы ваш метод имел только те параметры, которые вам нужны:

public void downloadphoto(string struri, string strtitle, string placeid)
{
    using (WebClient wc = new WebClient())
    {
        wc.DownloadDataCompleted += (sender, args) => 
            DownloadDataCompleted(strtitle, placeid, args);
        wc.DownloadDataAsync(new Uri(struri));
    }
}

// Please rename the method to say what it does rather than where it's used :)
private void DownloadDataCompleted(string title, string id, 
                                   DownloadDataCompletedEventArgs args)
{
    // Do stuff here
}
25
ответ дан 2 December 2019 в 04:33
поделиться

Вы можете создать частный класс и поместить туда обработчик. Например,

    public void downloadphoto(string struri, string strtitle, string placeid)
    {
        using (WebClient wc = new WebClient())
        {
            wcHandler handler = new wcHandler() { Strtitle = strtitle, Placeid = placeid };
            wc.DownloadDataCompleted += handler.wc_DownloadDataCompleted;
            wc.DownloadDataAsync(new Uri(struri));
        }

    }

    private class wcHandler
    {
        public string Strtitle { get; set; }
        public string Placeid { get; set; }

        public void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            // Do Stuff
        }
    }

Хотя, учитывая элегантность ответа Джона, он, вероятно, использовал бы это!

2
ответ дан 2 December 2019 в 04:33
поделиться

DownloadDataAsync имеет перегрузку, которая принимает объект:

DownloadDataAsync(uri, object)

Этим объектом может быть любая произвольная вещь, которая передается в обработчик DownloadDataCompleted :

public void downloadphoto(string struri,string strtitle,string placeid)
{
    using (WebClient wc = new WebClient())
    {
        string[] data = new string[2] { strtitle, placeid };
        wc.DownloadDataCompleted += wc_DownloadDataCompleted;
        wc.DownloadDataAsync(new Uri(struri), data);
    }
}


void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
    string[] data = (string[])e.UserToken;
    string strtitle = data[0];
    string placeid = data[1];
}
5
ответ дан 2 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: