急求!!用C#编写WPF工程,如何在主窗口实时显示程序运行的过程??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求!!用C#编写WPF工程,如何在主窗口实时显示程序运行的过程??相关的知识,希望对你有一定的参考价值。

如上问,例如我写了随机函数,使得对应的图片可以显示,就好像打地鼠类型的游戏,每一秒随机某张图片进行显示。现在我写的程序的问题是:弹窗后并不实时显示,而是等到时间计算完后(5秒之后),才显示哪张图片被选中。我的程序如下:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
namespace Handpoint

public partial class MainWindow : Window

static int x;
int n;
public MainWindow()

InitializeComponent();
while (true)

Random r = new Random();
x = r.Next(1, 4);//随机产生1-4之间的整数
//Console.WriteLine(x);
Thread.CurrentThread.Join(1000);
n++;
switch (x)

case 1: image1.Visibility = Visibility.Visible; break;
case 2: image2.Visibility = Visibility.Visible; break;
case 3: image3.Visibility = Visibility.Visible; break;
case 4: image4.Visibility = Visibility.Visible; break;

if (n == 5)

break;



想实现这种效果只能用多线程
把while里面的代码去掉Thread.CurrentThread.Join(1000);

然后放进timer里面就行了

你现在的实现方法只会显示最后的结果 因为在同一个方法内的所有操作都只会在结束时得到一个结果 然后UI刷新时只刷新这个结果 所以你要让处理逻辑和UI刷新分开来做 也就是多线程操作追问

其实我是刚学,所以有些东西还是不是很清楚,这个多线程应该怎么实现,timer又是怎样的一段程序,我还想请教一下!!

参考技术A 那你就一次产生5随机数不就好了么?

在主窗口边界上方/外部显示 wpf 内容 [关闭]

【中文标题】在主窗口边界上方/外部显示 wpf 内容 [关闭]【英文标题】:Displaying wpf content over/outside main window bounds [closed] 【发布时间】:2012-06-20 03:30:39 【问题描述】:

我正在尝试实现将主窗口边界与控件重叠的效果。很难用语言来解释这一点,这也可能是为什么我很难找到有关如何执行此操作或什至可能的信息的原因。

下面是我试图获得的效果示例(来自设计师),其中“注释”对象漂浮在主窗口的边界之外。

但是我在运行时得到的效果是这样的(下图),内部控件被主窗口的边界剪裁了。

有人可以告诉我这是否可能(或不可能),以及是否有一些关于如何获得这种效果的建议。

【问题讨论】:

您考虑过使用Popup吗? 谢谢,我认为 Popup 控件是要走的路 【参考方案1】:

有一个控件可以实现这种行为你试过Popup控件吗? 检查this out

这是一个例子;e"

<Window x:Class="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">
<Grid>
    <ToggleButton x:Name="MainButton" Content="Show popup" VerticalAlignment="Top" HorizontalAlignment="Right"/>
    <Popup PlacementTarget="Binding ElementName=MainButton" Placement="Bottom" AllowsTransparency="True" IsOpen="Binding ElementName=MainButton, Path=IsChecked">
        <Grid>
            <Border BorderBrush="Orange" BorderThickness="1" Background="Yellow"/>
            <TextBlock Text="Lorem Ipsum is simply dummy text of the printing and typesetting industry"/>
        </Grid>            
    </Popup>
</Grid>

【讨论】:

【参考方案2】:

窗口的内容总是会被剪裁。所以基本上只有一种方法可以去这里。您可以通过为浮动内容创建一个新的透明窗口,然后根据主窗口的位置手动设置和更新浮动内容窗口的位置来获得所需的效果。

到目前为止,我一直在使用 AvalonDock 来实现类似的功能。你可以试试看……

【讨论】:

【参考方案3】:

我认为没有办法在窗口边界之外进行绘制。但是,您可以简单地为便笺控件创建一个新窗口并将其与主窗口对齐。

【讨论】:

另一个答案似乎否定了这个。 弹出控件实际上在内部创建了一个新窗口,正如我在答案中所建议的那样。 确实如此。也许您可以通过简短的解释来扩展您的答案,说明使用弹出窗口同样也会创建一个新窗口。【参考方案4】:

你试过ClipToBounds属性吗?

【讨论】:

以上是关于急求!!用C#编写WPF工程,如何在主窗口实时显示程序运行的过程??的主要内容,如果未能解决你的问题,请参考以下文章

如何在WPF中单击菜单项时在父窗口下打开子窗口?

wpf 怎么在窗口里面显示一个窗口!

初学:我现在用VS2010编写WPF应用程序,一个窗口变化到另一个窗口应该怎么跳转?谢谢

在主窗口边界上方/外部显示 wpf 内容 [关闭]

这样的窗口如何做(WPF项目)

C# 主窗口调用子窗口的值传递?