bri*_*342 1 c# multithreading listbox method-invocation
我要做的是检查是否选中了列表框中的项目.
该方法正在一个单独的线程上运行,所以我需要使用我相信的方法调用程序.
string list = "";
lbxList.Invoke(new MethodInvoker(delegate { list = lbxList.SelectedItem.ToString(); }));
if (list != null)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
如果所选项目为null,则此代码将会爆炸,因为字符串列表不会保留它,因此我需要一种方法将前2行组合成if语句检查null.
谢谢
这应该做:
string list = "";
lbxList.Invoke(new MethodInvoker(delegate
{
if (lbxList.SelectedItem != null)
list = lbxList.SelectedItem.ToString();
}));
//do something
Run Code Online (Sandbox Code Playgroud)
只需将if语句放在匿名方法中即可.
请注意,.ToString是极不可能还回null什么,该的文件object.ToString是压倒一切的类型应该实现返回一个方法状态有意义的价值.由于我们已经知道它.SelectedItem不是null,因此检查null并不是必需的.如果你真的想要,你可以保留它,但如果你害怕.ToString应该返回null,我会改为将代码更改为:
string list = "";
lbxList.Invoke(new MethodInvoker(delegate
{
if (lbxList.SelectedItem != null)
list = lbxList.SelectedItem.ToString() ?? string.Empty;
}));
//do something
Run Code Online (Sandbox Code Playgroud)