Winforms INotifyPropertyChanged更新UI在长时间运行时挂起
我制作了一个以下示例,试图在长时间操作运行时动态更新我的UI,但UI在运行时会挂起 这是我的实体类:Winforms INotifyPropertyChanged更新UI在长时间运行时挂起,winforms,inotifypropertychanged,Winforms,Inotifypropertychanged,我制作了一个以下示例,试图在长时间操作运行时动态更新我的UI,但UI在运行时会挂起 这是我的实体类: public class ClsTest : INotifyPropertyChanged { private string _text; public string Text { get { return _text; } set { if (string.IsNullOrEmpty(value
public class ClsTest : INotifyPropertyChanged
{
private string _text;
public string Text
{
get { return _text; }
set
{
if (string.IsNullOrEmpty(value) && value == _text)
return;
_text = value;
NotifyPropertyChanged(() => Text);
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged<T>(Expression<Func<T>> property)
{
if (PropertyChanged == null)
return;
var memberExpression = property.Body as MemberExpression;
if (memberExpression == null)
return;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
}
}
当我在按钮单击方法中运行以下代码时,它将挂起:
for (int i = 0; i < 20; i++)
{
x.Text = i.ToString();
System.Threading.Thread.Sleep(1000);
}
for(int i=0;i<20;i++)
{
x、 Text=i.ToString();
系统线程线程睡眠(1000);
}
如何解决此问题?您似乎正在UI线程中运行此功能。显然,UI将挂起。你需要某种工作线程。使用
Task.Run
运行耗时的任务。如何重新构造代码以满足要求?那么,谢谢你。请参考我最近的答案和答案。如果这不能帮助您更新您的问题,您正在执行什么操作来代替Thread.Sleep(1000)
?那我会尽力帮忙的。
for (int i = 0; i < 20; i++)
{
x.Text = i.ToString();
System.Threading.Thread.Sleep(1000);
}