显示hadoop内容c#

koaltpgm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(300)

我想使用.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);
}

非常感谢

eanckbw9

eanckbw91#

如果在winforms事件处理程序中同步执行代码,则在这段时间内不会执行任何ui操作,因为您阻止了处理windows消息泵的ui线程。因此,每当您有长时间的操作并且您希望您的ui是被动的时,您就必须在一个单独的任务/线程中运行它们。
在单独的任务中运行操作会带来额外的挑战,即必须将所有ui操作封送回ui线程,因为如果在ui线程以外的线程中运行它们,则会遇到错误。
我想你有一个固定的 Click 处理程序两个参数 sender 以及 e (并且您是在.NET4.5中-否则您必须使用 Task.Factory 运行任务):

Task.Run(() => {
    try {
        IHadoop mycluster = Hadoop.Connect();
        string[] content = mycluster.StorageSystem.LsFiles("/");
        foreach (string s in content) {
            Console.WriteLine(s);
        }
    } catch (Exception exException) {
        MethodInvoker invoker = delegate() { MessageBox.Show (exException.Message); };
        ((Control)sender).Invoke(invoker);
    }
});

相关问题