我想使用.net获取hdfs群集中可用文件的列表。问题是,当我在program.cs中的main方法中运行代码时,它起作用了,当我尝试使用按钮中的代码时,应用程序就会阻塞。这是密码
using Microsoft.Hadoop.MapReduce;
try {
IHadoop mycluster = Hadoop.Connect();
string[] content = mycluster.StorageSystem.LsFiles("/");
foreach (string s in content) {
Console.WriteLine(s);
}
} catch (Exception exException) {
MessageBox.Show (exException.Message);
}
非常感谢
1条答案
按热度按时间eanckbw91#
如果在winforms事件处理程序中同步执行代码,则在这段时间内不会执行任何ui操作,因为您阻止了处理windows消息泵的ui线程。因此,每当您有长时间的操作并且您希望您的ui是被动的时,您就必须在一个单独的任务/线程中运行它们。
在单独的任务中运行操作会带来额外的挑战,即必须将所有ui操作封送回ui线程,因为如果在ui线程以外的线程中运行它们,则会遇到错误。
我想你有一个固定的
Click
处理程序两个参数sender
以及e
(并且您是在.NET4.5中-否则您必须使用Task.Factory
运行任务):