Получить ВОЗВРАТ из метода Invoke - PullRequest
2 голосов
/ 12 июня 2011

Я пытаюсь прочитать значение из элемента списка, который находится в другом потоке.

Я попытался создать новый метод для запуска команды invoke, мне удалось отправить команду в список, например, добавить через метод invoke, но я не могу получить ответ, я не могу получить значение вещь, я попробовал несколько способов, как только я изменил его с пустоты на строку, вещи начинают становиться волосатыми ...

  thread t1 = new thread(thethread)
    t1.start()

    public void thethread()
    {
    string text = readListBoxSelected(listBox1) + " lala" ;
    }



    public static string readListBoxSelected(ListBox listbox)
    {
        if (listbox.InvokeRequired)
        {
            return (string)listbox.Invoke(
              new Func<String>(() => readListBoxSelected(listbox))
            );
        }
        else
        {

            string varText = listbox.SelectedValue.ToString();
            return varText;
        }
        }

Выше приведен пример того, что я пытаюсь сделать.

Вот ошибка:

System.NullReferenceException было не обрабатывается кодом пользователя
Сообщение = ссылка на объект не установлена ​​на экземпляр объекта.
Источник = ** StackTrace: в ** .Form1.readListBoxSelected (список ListBox) в e: \ Documents and настройки \ скотт \ мои документы \ визуал студия 2010 \ Projects ***** \ Form1.cs: линия 133 в *** .orm1. <> c_ DisplayClass5.b _3 () в е: \ документы и настройки \ скотт \ мой документы \ визуальная студия 2010 \ Projects ****** \ Form1.cs: линия 127 InnerException:

Я полагаю, что неправильно именно то, что написано "Ссылка на объект не установлена ​​для экземпляра объекта" ....... Все мои переменные, как мне известно, объявлены как честные, как я могу исправить это ??

У меня такое ощущение, что я делаю все это неправильно .... 0_o Заранее спасибо, Скотт

Ответы [ 3 ]

3 голосов
/ 12 июня 2011

Попробуйте

1002 *
1 голос
/ 12 июня 2011

Код выглядит нормально, проблема появляется на SelectedValue , это null . ???

0 голосов
/ 13 июня 2011

Спасибо, ребята,

Вы были правы, проблема в том, что возвращалось нулевое значение ... Я был настолько уверен, что правильно выбирал элемент, я никогда не думал, что это может быть проблемой.

Оказывается, проблема была в двух вещах:

1) При выборе элемента я использовал listbox.Selecteditem = 1, теперь, если я использую listbox.setSelected (1, true) allэто хорошо:)

и

2) То, как я получал текст предметов, было неверным, listbox.SelectedValue - ничто, он не делает то, что все мы себе это представляемчтобы сделать ... вызов, который мне нужен был listbox.Text .........

public static string readListBoxSelected(ListBox listbox)
{
    if (listbox.InvokeRequired)
    {
        return (string)listbox.Invoke(
          new Func<String>(() => readListBoxSelected(listbox))
        );
    }
    else if(listbox.Text != null)
    {
        return  listbox.Text.ToString();
    } 
    else
    return String.Empty;
    }


public void selectListBoxItem(ListBox listbox, int num)
{
    Invoke(new MethodInvoker(delegate { listbox.SetSelected(num,true); }));
}

Я должен сказать, что это самая раздражающая вещь, которую якогда-либо делал ... Все требует, чтобы я написал для него метод делегата / вызова ... Все ... что-то настолько распространенное, что поддерживается .net на лету ....

Кажется,время писать отдельных делегатов для ВСЕГО ...

Спасибо, ребята, все работает сейчас, вчера я не мог предвидеть менядойдя до этого момента, Общая проблема была в Wrong Calls, все было в порядке:)

Скотт

РЕДАКТИРОВАТЬ:

ОКвозвращал NULL просто потому, что listbox.SelectedValue на самом деле не является вызовом im после чтения выбранного значения (вы могли бы подумать, что это так), если я изменил его на listbox1.text, все работает нормально .... довольно глупо, если это объектно-ориентированная вещь, еслия так говорю ....

Я должен сказать, что это шутка ... это любезно разрушило мою веру в объектно-ориентированное программирование ... Я понимаю, что это не дискуссия, а, честно говоря, вызов SelectedValue.toString () должен делать то, что мы все думаем, что он будет делать ... нет, нам нужно использовать .Text, чтобы получить то, что нам требуется 0_o .........

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...