C# 过程中在屏幕上显示信息

C# 过程中在屏幕上显示信息,c#,wpf,C#,Wpf,我想在屏幕上显示有关流程的信息,供用户查看 开始时,我使用了另一个线程,但这引发了一个异常。现在我不知道了。如何在另一个过程中同时更改屏幕上的值 如何使用GetElapsedTime显示进程中经过的毫秒数 WPF(XAML代码) 公共部分类主窗口:窗口 { 私人工作状态_工作状态; 公共主窗口() { 初始化组件(); } 私有无效按钮开始单击(对象发送者,路由目标) { _StatusOfWork=新建StatusOfWork(); _工作状态。计数n(10); 这个

我想在屏幕上显示有关流程的信息,供用户查看

开始时,我使用了另一个线程,但这引发了一个异常。现在我不知道了。如何在另一个过程中同时更改屏幕上的值

如何使用GetElapsedTime显示进程中经过的毫秒数

WPF(XAML代码)


公共部分类主窗口:窗口
{
私人工作状态_工作状态;
公共主窗口()
{            
初始化组件();
}
私有无效按钮开始单击(对象发送者,路由目标)
{
_StatusOfWork=新建StatusOfWork();
_工作状态。计数n(10);
这个。关闭();
}
}
工作类别
{
公共日期时间StartDateTime{get;set;}
公共无效计数(整数次)
{
StartDateTime=DateTime.Now;

对于(inti=1;i,您需要使用WPF数据绑定概念。我建议您看看这个,它有几个到各种教程的好链接

话虽如此,对代码的一个更改应该让您开始:我为标签添加了一个名为
laveleversedtime
的绑定

<StackPanel>
    <Button Content="Start" Height="20" Width="50" HorizontalAlignment="Left" Name="ButtonStart" Click="ButtonStart_Click"/>
    <Label Content="Elapsed Time (Milliseconds):"/>
    <Label Name="LabelElapsedTime"
        Content="{Binding ElapsedTime, RelativeSource={RelativeSource AncestorType=Window}}"/>
</StackPanel>
为简单起见,我将属性保留为字符串,但您可能希望使用不同的数据类型。您将需要使用
ValueConverter
。上面提到的stackoverflow文章中的链接详细解释了这一点


另外:我猜您在使用线程时遇到的异常可能是调度异常。这是一个帮助您了解如何修复该异常的方法。

这将不起作用。使用thread.Sleep的循环只会阻塞UI线程。使单击处理程序异步并替换thread.Sleep with
wait Task.Delay()
。除此之外,
绑定失效时间
缺少一个源代码。您可以将窗口的DataContext设置为自身,或者使用ElementName或RelativeSource绑定。鉴于该问题没有包含完整的源代码,我认为建议的答案就足够了。老实说,这个问题可能被标记为not compl够了。很好,有一个答案可以帮助回答这个问题,句号。@tatmanblue这个答案很糟糕。它不能解释任何事情,代码也不起作用。你的投票没有让它变得更好。此外,这个问题不应该(现在)答案是肯定的,因为不清楚OP实际上想要实现什么。另外,
ReleasedTimeDependency
是不完整和错误的。dependency属性
ReleasedTime
的标识符字段必须命名为
ReleasedTimeProperty
,并且应该在帖子中显示。而且,您不会真正使用
字符串
pe表示“经过的时间”。请改用
TimeSpan
。现在还不清楚您到底想在这里做什么。是否确实有后台线程?是否需要?为什么不能使用BackgroundWorker,或者更好的
async/await
<StackPanel>
    <Button Content="Start" Height="20" Width="50" HorizontalAlignment="Left" Name="ButtonStart" Click="ButtonStart_Click"/>
    <Label Content="Elapsed Time (Milliseconds):"/>
    <Label Name="LabelElapsedTime"
        Content="{Binding ElapsedTime, RelativeSource={RelativeSource AncestorType=Window}}"/>
</StackPanel>
public partial class MainWindow : Window
{
    private StatusOfWork _StatusOfWork;

    public MainWindow()
    {
        InitializeComponent();
    }

    public static readonly DependencyProperty ElapsedTimeProperty =
        DependencyProperty.Register(nameof(ElapsedTime), typeof(string), typeof(MainWindow));

    public string ElapsedTime
    {
        get { return (string)GetValue(ElapsedTimeProperty); }
        set { SetValue(ElapsedTimeProperty, value); }
    }

    private async void ButtonStart_Click(object sender, RoutedEventArgs e)
    {

        for(int count = 0; count < 10; count ++)
        {
            ElapsedTime = string.Format("{0}", count);
            await Task.Delay(1000);
        }
        this.Close();
    }
}