c# WPF将worker信息从worker.cs推送到Home.xaml
本文关键字:worker Home xaml WPF 信息 cs | 更新日期: 2023-09-27 18:12:14
我对WPF很陌生,我已经尝试了几天了。
在mainwindow . example .cs中,我创建了一个新的Worker实例。
public MainWindow()
{
InitializeComponent();
Worker worker = new Worker();
worker.run_Worker();
}
主窗口。xaml加载Home。Xaml on startup:
ContentSource = "/页面/Home.xaml"
In my Home。我有一个进度条和一个Infolog。
在Worker中,我尝试这样做:
Home home = new Home();
Dispatcher.BeginInvoke(new Action(() =>
{
home.InfoLog.Content = "test";
}));
如果我把worker的代码放到Home. example .cs中,而不是如果我把worker放在一个单独的类中,并把数据推送到Home的一个新实例中,那么它正在工作。
是否有办法将信息推送到不同的类/页面,而不使用Home()的新实例?
谢谢你
你可以将"this"传递给new Worker(),并使其成为Worker的私有属性。所以:
UI<Window x:Class="testappreddit.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:testappreddit"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="525"
Height="350"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
mc:Ignorable="d">
<Grid>
<StackPanel>
<Home x:Name="home" />
</StackPanel>
</Grid>
</Window>
后端
public class MainWindow{
public MainWindow()
{
InitializeComponent();
Worker worker = new Worker(this);
worker.run_Worker();
}
}
public class Worker
{
private MainWindow lthis{get;set;}
public Worker(MainWindow lthis)
{
this.lthis = lthis;
}
public void run_worker(){
while(lthis != default(MainWindow)){
DoWork();
Thread.Sleep(5000);
}
}
private void DoWork(){
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
lthis.home.InfoLog.Content = "test";
}));
}
}
public class Home
{
public InfoLog InfoLog {get;set;}
}
public class InfoLog
{
public string Content {get;set;}
}
您还必须使用
Application.Current.Dispatcher
调用任何UI更改