gpt4 book ai didi

wpf - 从另一个类和单独的线程更改 WPF 主窗口标签

转载 作者:行者123 更新时间:2023-12-02 07:29:35 25 4
gpt4 key购买 nike

我正在开发 WPF 应用程序。我在 MainWindow.xaml 中有一个名为“Status_label”的标签。我想从不同的类(signIn.cs)更改其内容。通常我能够做到这一点

var mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
mainWin.status_lable.Content = "Irantha signed in";

但我的问题是,当我尝试通过signIn.cs类中的不同线程访问它时,它给出了一个错误:

The calling thread cannot access this object because a different thread owns it.

我可以使用 Dispatcher.Invoke(new Action(() =>{....... 或其他方法解决这个问题吗?

编辑:我将从不同的类以及单独的线程中调用此标签更改操作

MainWindow.xaml

<Label HorizontalAlignment="Left" Margin="14,312,0,0" Name="status_lable" Width="361"/>

SignIn.cs

    internal void getStudentAttendence()
{
Thread captureFingerPrints = new Thread(startCapturing);
captureFingerPrints.Start();
}

void mySeparateThreadMethod()
{
var mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
mainWin.status_lable.Dispatcher.Invoke(new Action(()=> mainWin.status_lable.Content ="Irantha signed in"));
}

line var mainWin 返回错误调用线程无法访问此对象,因为另一个线程拥有它。

请指导我,

谢谢

最佳答案

我解决了我的问题,希望有人需要这个。但不知道这是否是优化的方式。

在我的ma​​inWindow.xaml.cs中:

    public  MainWindow()
{
main = this;
}

internal static MainWindow main;
internal string Status
{
get { return status_lable.Content.ToString(); }
set { Dispatcher.Invoke(new Action(() => { status_lable.Content = value; })); }
}

来 self 的SignIn.cs

 MainWindow.main.Status = "Irantha has signed in successfully";

这对我来说效果很好。您可以从这里找到更多详细信息,Change WPF window label content from another class and separate thread

干杯!!

关于wpf - 从另一个类和单独的线程更改 WPF 主窗口标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15425495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com