【发布时间】:2020-03-31 10:12:02
【问题描述】:
基本上我想实现一个相当简单的事情。我有一个C#wpf-Application,在一个类中(这里是main)我有几个控制元素。 (按钮、文本框……)
现在我执行一个方法(这里是main的构造函数)。在这个方法中,我想从不同的类中调用另一个方法(这里是方法SomeFunction())。现在这个方法有两个条件:
- 它应该在后台工作,因此 GUI 仍然可用(四处移动、单击按钮等)
- 它实际上需要来自 GUI 的控制元素的输入(在
main中)
在网上搜索后,我对第一个要求的想法是使用Task。
实际上这工作得很好,但我还必须使用Dispatcher,以免遇到错误:
System.InvalidOperationException:调用线程无法访问此对象,因为不同的线程拥有它
但是,通过使用Dispatcher,GUI 再次被阻止并且不再可用。
有什么办法可以同时满足上面的两个要求吗?
主类看起来像这样:
public class Main
{
public Main()
{
// This class has buttons, textboxes, labels, etc.
InitializeComponent();
Task.Run(() => // Task is needed to do work in background (GUI is not blocked)
{
Dispatcher.Invoke(() => // Dispatcher is needed to avoid "System.InvalidOperationException"
{
// Initialize a new object with this class as parameter
OtherClass otherObject = new OtherClass(this);
// Now call a method from another class
otherObject = new OtherClass(this);
});
});
}
}
其他类是这样的:
public class OtherClass
{
public SomeFunction(Main main)
{
// Pretty hard work here to do ...
string test = main.textbox.Text;
}
}
【问题讨论】:
标签: c# wpf task wpf-controls dispatcher