我刚刚在C#.Net 4.0 WPF后台线程中意识到这不起作用(编译器错误):
Dispatcher.Invoke(DispatcherPriority.Normal, delegate()
{
// do stuff to UI
});
Run Code Online (Sandbox Code Playgroud)
从一些例子中我发现它必须像这样铸造:(Action)delegate().然而,在其他示例中,它被转换为其他类,例如System.Windows.Forms.MethodInvoker.
谁能告诉我上面这个例子究竟出了什么问题呢?我也尝试用其他方法重现它,但它总是在没有强制转换的情况下工作:
delegate void MyAction();
void Method1(MyAction a) {
// do stuff
}
void Method2(Action a) {
// do stuff
}
void Tests()
{
Method1(delegate()
{
// works
});
Method2(delegate()
{
// works
});
Method1(() =>
{
// works
});
Method2(() =>
{
// works
});
Method2(new Action(delegate()
{
// works
}));
new System.Threading.Thread(delegate()
{
// works
}).Start();
}
Run Code Online (Sandbox Code Playgroud)
那么最好的(最优雅的,更少冗余的)调用Dispatcher的方式是什么,并且它的特殊之处在于代理必须被转换?
我正在开发一个 chrome 扩展程序,我想将一些数据永久存储在用户系统的文件中,以便我可以在用户每次运行扩展程序时检索该数据。
有没有办法可以使用 chrome javascript API 来完成此任务?
提前致谢。
使用.Net 的 OleDb,我尝试导入一个 Excel 表,其中第一行可以为空。我想保留 DataTable 中的空行,以便稍后能够将单元格映射到 Excel 样式的单元格名称“A1、A2、...”。但无论我做什么,第一行都会被删除。
Excel 文件如下所示:
- - -
ABC XY ZZ
1 2 3
4 4 5
Run Code Online (Sandbox Code Playgroud)
其中“-”是空单元格。(我对导入格式没有影响。)
简化代码:
string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"file.xls\";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
string mySheet = "Sheet1$";
OleDbConnection connection = new OleDbConnection(cnnStr);
DataSet Contents = new DataSet();
using (OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [" + mySheet + "]", connection))
{
adapter.Fill(Contents);
}
Console.WriteLine(Contents.Tables[0].Rows.Count); // prints: 3
Console.WriteLine(Contents.Tables[0].Rows[0].ItemArray[0]); // prints: ABC
Run Code Online (Sandbox Code Playgroud)
知道如何保留那个空行吗?
ps:我发现如何在从 Excel 读取时计算空行,但无法重现它。