我的自定义事件无法更新我的UWP应用程序上的文本框。如果我用debug.Writeline替换Textbox1.Text它可以工作。我有理由不能使用事件更新文本框吗?如果我使用Progress对象,它可以工作。我只想弄清楚为什么它不适用于我自己的自定义事件。谢谢
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void button_click(object sender, RoutedEventArgs e)
{
recData myRecDataobject = new recData();
myRecDataobject.dataRecvEvent += () =>
{
textBox2.Text = "Event Occured"; // This throws an error
Debug.WriteLine("test2");
};
Progress<int> progress = new Progress<int>();
myRecDataobject.getDataMethodAsync(progress);
progress.ProgressChanged += (o, result) =>
{
textBox1.Text = result.ToString();
};
}
}
public class recData
{
public delegate void myEvenetHandlerDelegate();
public event myEvenetHandlerDelegate dataRecvEvent;
private int _myValue;
public int myValue
{
get
{
return _myValue;
}
set
{
_myValue = value;
}
}
public async void getDataMethodAsync(Progress<int> progress)
{
await getDataMethod(progress);
}
private Task getDataMethod(IProgress<int> progress)
{
return Task.Factory.StartNew(() =>
{
for (int i = 0; i < 1000; i++)
{
Task.Delay(2000).Wait();
if (dataRecvEvent != null)
{
dataRecvEvent();
progress.Report(i);
}
}
});
}
}
答案 0 :(得分:1)
您正在尝试从后台线程更新XAML属性。这不起作用(您的错误应该是&#34;访问被拒绝&#34;)。
使用Dispatcher.BeginInvoke
在UI线程上安排TextBox属性更新。