我在wpf数据网格后面有鼠标双击事件,如下所示:
async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
var dg = (DataGrid)o;
var item = (MyCustomType)dg.SelectedItem;
await MyAsyncMethod(item.Id);
}和在线
var dg = (DataGrid)o;发生NullReferenceException。Morover,我无法在调试会话中显示值。当我将方法更改为:
async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
if(o is DataGrid && (o as DataGrid).SelectedItem !=null)
{
await MyAsyncMethod(((MyCustomType)(o as DataGrid).SelectedItem).Id);
}
}每件事似乎都是正确的。异步鼠标双击如何工作,使我无法调用事件,如第一表示?
发布于 2018-03-22 10:39:12
第一个代码段和第二个代码片段的主要区别是,第一个代码段不检查实际是否有可用的SelectedItem。
像这样使用as操作符,您应该会很好:
async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
var dg = (DataGrid)o;
var item = dg.SelectedItem as MyCustomType;
if (item != null)
await MyAsyncMethod(item.Id);
}您的问题与事件本身无关,也与async/await无关。
编辑:
如果MyCustomType是struct,则不能使用as运算符,但仍应检查SelectedItem属性是否实际设置:
async void dataGrid_MouseDoubleClick(object o, MouseButtonEventArgs e)
{
var dg = (DataGrid)o;
if (dg.SelectedItem != null)
{
await MyAsyncMethod(((MyCustomType)dg.SelectedItem)item.Id);
}
}https://stackoverflow.com/questions/49422924
复制相似问题