相关疑难解决方法(0)

如何从其他线程更新GUI?

Label从另一个线程更新a的最简单方法是什么?

我有一Formthread1,并从我开始另一个线程(thread2).虽然thread2在处理一些文件,我想更新LabelForm用的当前状态thread2的工作.

我怎样才能做到这一点?

.net c# user-interface multithreading winforms

1331
推荐指数
41
解决办法
63万
查看次数

WPF中的Application.DoEvents()在哪里?

我有以下示例代码,每次按下按钮时缩放:

XAML:

<Window x:Class="WpfApplication12.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Canvas x:Name="myCanvas">

        <Canvas.LayoutTransform>
            <ScaleTransform x:Name="myScaleTransform" />
        </Canvas.LayoutTransform> 

        <Button Content="Button" 
                Name="myButton" 
                Canvas.Left="50" 
                Canvas.Top="50" 
                Click="myButton_Click" />
    </Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud)

*的.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        Console.WriteLine("scale {0}, location: {1}", 
            myScaleTransform.ScaleX,
            myCanvas.PointToScreen(GetMyByttonLocation()));

        myScaleTransform.ScaleX =
            myScaleTransform.ScaleY =
            myScaleTransform.ScaleX + 1;

        Console.WriteLine("scale {0}, location: {1}",
            myScaleTransform.ScaleX,
            myCanvas.PointToScreen(GetMyByttonLocation()));
    }

    private Point GetMyByttonLocation()
    {
        return new Point(
            Canvas.GetLeft(myButton),
            Canvas.GetTop(myButton));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

scale 1, location: …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml

82
推荐指数
5
解决办法
8万
查看次数

从UI线程强制GUI更新

在WinForms中,如何从UI线程强制立即更新UI?

我正在做的大致是:

label.Text = "Please Wait..."
try 
{
    SomewhatLongRunningOperation(); 
}
catch(Exception e)
{
    label.Text = "Error: " + e.Message;
    return;
}
label.Text = "Success!";
Run Code Online (Sandbox Code Playgroud)

在操作之前,标签文本未设置为"Please Wait ...".

我使用另一个线程进行操作解决了这个问题,但它变得毛茸茸,我想简化代码.

c# multithreading winforms

69
推荐指数
5
解决办法
11万
查看次数

使用方法更改label.visibility - 为什么不隐藏?

我希望能够使用方法将任何标签的可见性设置为true或false.我有这个代码:

private void Change_Visible(Label toBeChanged)
{
    if (toBeChanged.Visible == false)
    {
        toBeChanged.Visible = true;
    }
    else
    {
        toBeChanged.Visible = false;
    }
    toBeChanged.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

我用以下代码调用此代码:

    Change_Visible(myLabel);
    //
    // Do other things
    //
    Change_Visible(myLabel);
Run Code Online (Sandbox Code Playgroud)

在我的具体示例中,myLabel设置为在我的表单加载时不可见.在第一次调用Change_Visible之后它变得可见,但在第二次调用Change_Visible之后没有任何反应.你能帮助我让它消失吗?

我已经尝试了一些寻找解决方案的其他逻辑 - 例如:

private void Change_Visible(Label toBeChanged)
{
    if (toBeChanged.Visible == false)
    {
        toBeChanged.Visible = true;
        toBeChanged.Refresh();
        return;
    }
    if (toBeChanged.Visible == true)
    {
        toBeChanged.Visible = false;
        toBeChanged.Refresh();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还没有得出任何结论.我自己学习C#并在几周前开始学习,所以也许我错过了一些明显的东西.谢谢你的帮助!

c# methods winforms

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×4

winforms ×3

.net ×2

multithreading ×2

methods ×1

user-interface ×1

wpf ×1

xaml ×1