您好我正在尝试将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个小时,阅读微软文档,所以最接近的我可以得到this,因为我可以看到已经实施过的建议。< / p>
答案 0 :(得分:1)
OnNewTextFound
事件在与UI的单独线程上触发,因此您尝试更新UI失败。在另一个线程中抛出异常,中止该方法的其余部分,但您的UI线程仍在执行。
您必须调用Invoke()
才能在UI线程上执行代码:
listBox1.Invoke(new MethodInvoker(delegate { listBox1.Items.Add(eventArg); }));
答案 1 :(得分:0)
您正在将ListArgs添加到ListBox的Items列表中。是否有可以添加的eventArgs。[someString]?
答案 2 :(得分:-1)
在构建表单期间,您无法将项目添加到列表框中。您需要将代码移动到Load事件中。