我正在编写一个WPF表单应用程序,在其中我试图循环通过一个文件夹并实时显示其文件,使用异步等待方法。在我的任务中。运行()方法我正在引发我的事件,这会引发罚款,但是事件代码也会更新UI线程上的文本框,因此我UI线程错误
'调用线程无法访问此对象,因为另一个线程拥有它。'
.有什么方法可以更改我的代码,以便我可以更新我的TextBox?
private delegate void GetFilesCount(string f);
private event GetFilesCount onFileCount;
private void Btn_Compare_Click(object sender, RoutedEventArgs e)
{
onFileCount += FileCount;
CountFilesAsync();
}
function async void CountFilesAsync() {
await Task.Run(()=> {
System.IO.DirectoryInfo myDir = new System.IO.DirectoryInfo(path);
foreach (FileInfo item in myDir.GetFiles())
{
onFileCount(item.Name); // This is an EVENT
}
});
}
和我的事件处理程序代码
private void FileCount(string fileName)
{
txtLabel_Log.Text = fileName; // < -- Calling Method UI Error
}
4.5中的异步:在异步API中启用进度和取消
private void Btn_Compare_Click(object sender, RoutedEventArgs e)
{
CountFilesAsync(Progress<string>(FileCount));
}
private async void CountFilesAsync(IProgress<string> progress)
{
await Task.Run(() =>
{
System.IO.DirectoryInfo myDir = new System.IO.DirectoryInfo(path);
foreach (FileInfo item in myDir.GetFiles())
{
progress(item.Name); // report progress
}
});
}
不确定这是否对您有帮助,但您可以尝试调用应用程序调度程序。
private void FileCount(string fileName)
{
Application.Current.Dispatcher.Invoke(() => {
txtLabel_Log.Text = fileName; // < -- Calling Method UI Error
});
}
我正在使用MVC模式开发一个WinForms应用程序。我是否应该从控制器访问UI组件,例如treeview节点? 我想访问一个treeview选择的节点并改变它的标记之类的东西,我应该从controller访问它还是违反MVC的原则? 唯一让我恼火的是treenode属于名称空间,并且从MVC透视图/表单相关组件应该只在视图中使用,所以我才问。
我在robolectric(Version1.1)测试案例中获取主UI线程时遇到了麻烦。我正在测试的应用程序方法中有以下检查:
通过向代码中添加以下类,我向现有springboot REST API中添加了一个简单的招摇过市UI: 我的问题是,API应该是公共的,但招摇过市的文档不应该是公共的。我想要一种请求对swagger文档进行身份验证的方法,有人知道实现这一点的简单方法吗? 我试着用谷歌搜索它,但我只能找到誓言的东西,但这是endpoint的身份验证,而不是招摇过市的文档。。。
每个用户界面都考虑以下三个主要方面 - UI elements - 这些是用户最终看到并与之交互的核心可视元素。 JavaFX提供了大量广泛使用的常用元素列表,从基本到复杂,我们将在本教程中介绍。 Layouts - 它们定义了如何在屏幕上组织UI元素,并为GUI(图形用户界面)提供最终外观。 这部分将在布局章节中介绍。 Behavior - 这些是用户与UI元素交互时发生的事件。 这部分将在“事
我对平台有几个问题。稍后运行。我有一个JavaFX应用程序类。在这个类中,我运行一个线程(线程从网络套接字读取数据)。 现在,当我在线程中创建一个新的时,系统会抛出一个执行(JavaFX事件调度器线程和我的netork-read线程不一样)-我理解这种行为。 但另一方面,我将来自网络阅读器的文本附加到现有的文本区域,或者在列表视图中添加/删除一些项目 我的问题: JavaFX事件调度器线程何时引发
我想从一个长期运行的方法状态更新。通常我会使用dispatcher回发到UI线程,但我对使用async Await很好奇。 为了简单起见: 但这是Fugly。此外,如果您去掉async和await关键字并将其替换为task.waitall,它仍将按预期执行。 注意:如果您想知道为什么我使用thread.sleep而不是task.delay,我实际上也在Silverlight中测试了这一点,异步等待