2015-05-13 5 views
2

Привет, я пытаюсь собрать вывод библиотеки this в список.Невозможно добавить строки в список

Вот часть кода из тестового проекта, с я пытался изменить:

public partial class Form1 : Form 
{ 
    D.Net.Clipboard.ClipboardManager Manager; 

    public Form1() 
    { 
     InitializeComponent(); 
     Manager = new D.Net.Clipboard.ClipboardManager(this); 
     Manager.Type = D.Net.Clipboard.ClipboardManager.CheckType.Text; 
     Manager.OnNewTextFound += (sender, eventArg) => 
     { 
      button1.Text = eventArg;   //just testing, working correctly 
      listBox1.Items.Add(eventArg);  //does not show neither result nor any error 
      MessageBox.Show(String.Format("New text found in clipboard : {0}", eventArg)); 
     }; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Add("test");    //working correctly 
    } 
} 

Проблема заключается в том, когда я пытаюсь добавить элемент в список он не делает ничего, и далее строк кода (в эта функция) не запускаются вообще.

Я попытался исправить это через некоторые пользовательские классы и разные выражения, но ничего не работало для меня (да, я нооб). Также попытался сделать это с помощью textBox, результат будет таким же, но текст на кнопках изменится как следует.

Похоже, что все проблемы с хромой проблемой, но я потратил почти 5 часов на поиск в Google, прочитав документацию по microsoft, и ближе всего я могу получить this, так как я вижу, что предлагаемые там уже реализованы.

+0

Если удалить 'listBox1.Items.Add (eventArg)', 'делает MessageBox' работу правильно? –

+0

Попробуйте использовать 'listBox1.Items.Add (eventArg.ToString());' и посмотрите, работает ли это. –

+0

'button1.Text = eventArg;' даже не будет компилироваться для меня. – Ulric

ответ

1

Событие OnNewTextFound запускает отдельный поток из пользовательского интерфейса, поэтому попытка обновления пользовательского интерфейса не работает. Исключение выдается в другом потоке, прерывая остальную часть этого метода, но ваш поток пользовательского интерфейса продолжает выполняться.

Вы должны вызвать Invoke(), чтобы выполнить код обратно в потоке пользовательского интерфейса:

listBox1.Invoke(new MethodInvoker(delegate { listBox1.Items.Add(eventArg); })); 
-1

Вы не можете добавлять элементы в список при оформлении формы. Вам нужно переместить код в событие «Загрузить».

+0

Просто попробовал, результат такой же. – Obelus

0

Вы добавляете EventArgs в список Items для ListBox. Есть ли eventArgs. [SomeString], который вы можете добавить?

+0

Нет, VS предложил просто стандартные операции, а в коде библиотеки ничего не объявлено, а 'string text', как я вижу. – Obelus

+0

Я вижу это сейчас. Делегат объявляется вторым параметром в виде строки. Мой следующий вопрос: когда происходит увольнение? Может ли eventArg когда-либо быть нулевым? Возможно, добавьте нулевую проверку, чтобы добавлять только элементы со значением. то есть. Если (! String.IsNullOrEmpty (eventArg)) {listBox1.Items.Add (eventArg); } – iCode

Смежные вопросы