C# 当线程在C中运行时,在GUI中显示消息#
我有一个应用程序,在第一次启动时,每7天执行一次更新,从web下载一些文件 根据需要下载的文件数量,此更新最多可能需要5分钟 我想做的是在一个单独的线程中运行更新,以便在处理更新时GUI的其余部分可用 对于我的应用程序来说,这似乎是一个非常可行的选项,但我也希望在主GUI中(可能在状态栏中)显示一条消息,告诉用户更新正在处理中,并且在完成时会消失C# 当线程在C中运行时,在GUI中显示消息#,c#,.net,multithreading,.net-4.0,C#,.net,Multithreading,.net 4.0,我有一个应用程序,在第一次启动时,每7天执行一次更新,从web下载一些文件 根据需要下载的文件数量,此更新最多可能需要5分钟 我想做的是在一个单独的线程中运行更新,以便在处理更新时GUI的其余部分可用 对于我的应用程序来说,这似乎是一个非常可行的选项,但我也希望在主GUI中(可能在状态栏中)显示一条消息,告诉用户更新正在处理中,并且在完成时会消失 我已经到处寻找方法来做这件事,但似乎没有什么弹出的解决方案,我正在寻找。有人知道这是否可能以及如何做到吗 您需要做的就是用后台线程的调用包装您的UI访
我已经到处寻找方法来做这件事,但似乎没有什么弹出的解决方案,我正在寻找。有人知道这是否可能以及如何做到吗 您需要做的就是用后台线程的调用包装您的UI访问代码。要使用的
Dispatcher
实例可以通过UIElement
的属性获得
假设以下方法是在UI元素的类定义中定义的:
private void ProcessItems(IList<Item> items)
{
Task.Factory.StartNew(() =>
{
for (int i = 0; i < items.Count; ++i)
{
// Code here runs on background thread.
this.ProcessItem(items[i]);
this.Dispatcher.Invoke(DispatcherPriority.Normal, () =>
{
// Code here runs on UI thread.
this.UpdateStatus("Completed " + (i + 1) + " of " + items.Count);
});
}
},
TaskCreationOptions.LongRunning);
}
private void ProcessItems(IList项)
{
Task.Factory.StartNew(()=>
{
对于(int i=0;i
{
//这里的代码在UI线程上运行。
this.UpdateStatus(“已完成”+(i+1)+“of”+items.Count);
});
}
},
TaskCreationOptions.LongRunning);
}
和这个小家伙在一起:
internal static class ControlExtensions
{
internal static void Invoke(this Control control, Action action)
{
control.Invoke(action);
}
}
您可以调用代码(在win form world中,wpf有自己的解决方案):
使用。向我们展示代码,以便我们可以在此基础上构建!!否则,您将得到超级通用的答案;)是的,现在的GUI必须是WPF。
... form.Invoke(()=>form.SomeControl.SomeProperty=someValue);