我一直在寻找原因,但关于stackoverflow上的每一个主题,我都能找到一个忙碌的UI作为原因.我有非常基本的代码,仅用于测试,它根本不会更新UI,即使我确信它不能忙于做其他事情:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
static double t = 0;
static double dt = 0.1;
private void button1_Click(object sender, RoutedEventArgs e)
{
Timer timer = new Timer(5000);
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(Update);
timer.Start();
}
void Update(object sender, ElapsedEventArgs e)
{
t = t + dt;
testBlock1.Text = (t).ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
我调试了它并为textBlock1.Text更新设置了一个断点,它确实每隔5秒就会中断,但UI永远不会更新.从代码中可以看出,当我将鼠标移到Button我用来启动计时器时,按钮会显示其典型的"鼠标悬停按钮"动画.为什么会这样,但不是文本更新?
如果有人能引导我到stackoverflow的一个好主题,请这样做,我将在这里删除我的问题,但我找不到任何主题解释为什么这种方法不更新UI即使UI不忙做任何其他.
在我的应用程序中,我使用两个滑杆来控制某些图像的亮度和对比度,并且当两个滑杆中的任何一个更改其值属性时,每次必须逐像素完全重新计算图像。较小图像的重新计算完全可以完成,不会造成任何问题,但是,较大图像需要重新计算,并且与鼠标指针相比,滑块的移动略有延迟。我确实需要实时或多或少地重新计算图像,因此只需在DragCompleted或类似是不可接受的。
重新计算使用 ValueChanged滑块 -event。我认为,如果不尽快触发该事件,但至少要等待50毫秒再触发一次,此问题的一种好的解决方案是,但是滑块是否具有可以控制该事件的属性?
我想到的另一种解决方案是,在事件得到处理后,从开始时立即从滑块中删除该事件,然后在短时间内再次将其添加,但这本身可能会导致一些延迟,因此在这里也不是优选的。
我真的在任何地方都找不到关于该主题的任何内容,因此,如果有人有我可以使用的任何好的建议或指示,我将非常感激。
只需MainWindow单击按钮,我就可以进行一些可能需要几秒钟的计算.在那段时间我想展示一个小对话框(或单独的窗口),说"请等待......"在其中间MainWindow将完全阻止它,因此在关闭此对话框之前,用户无法执行任何操作.我尝试创建一个窗口并打开它,window.ShowDialog();但这当然不会继续说明......
有没有其他方法可行?
我有一个二进制文件,用C语言编写,包含很长的数字流.首先它随后包含4次int(所以前16个字节是4个int)然后它包含双精度(我假设每8个字节一个新的双精度).
任何地方或其他任何地方都没有空格.现在我需要用C#读取数据,但到目前为止我试过的一切都没有用,有什么建议吗?
我的程序中基本上有一个简单的问题,我只想确保一切正常。它应该在单击鼠标按钮时添加MouseEventHandler,然后与鼠标一起移动圆圈,直到事件处理程序被删除。我将代码简化为非常基础的代码:
XAML:
<Window x:Class="WpfApplication1.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 Name="grid1" Background="White" MouseLeftButtonUp="grid_MouseUp">
<Ellipse Height="50" HorizontalAlignment="Left" Margin="12,12,0,0" Name="ellipse1" Stroke="{x:Null}" VerticalAlignment="Top" Width="50" Fill="Black" MouseLeftButtonDown="ellipse1_MouseDown" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
C#:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private static Point _oldPoint = new Point(), _newPoint = new Point();
private void ellipse1_MouseDown(object sender, MouseButtonEventArgs e)
{
_oldPoint = e.GetPosition(grid1);
grid1.MouseMove += new MouseEventHandler(grid_MouseMove);
}
private void grid_MouseUp(object sender, MouseButtonEventArgs e)
{
grid1.MouseMove -= new MouseEventHandler(grid_MouseMove);
}
private …Run Code Online (Sandbox Code Playgroud) 可能重复:
正确使用IDisposable接口
我试图通过书籍,互联网和stackoverflow找到我的问题的实际答案,但到目前为止没有任何帮助我,所以希望我可以说明我的问题足够有意义.
一般来说,我总是找到与如何释放内存相同的基本用法,即约.如下,我确实理解代码本身:
public class MyClass : IDisposable
{
bool disposed = false;
public void Dispose()
{
if (!disposed)
{
Dispose(true);
GC.SuppressFinalize(this);
disposed = true;
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//free managed ressources
}
// free other ressources
}
~MyClass()
{
Dispose(false);
}
}
Run Code Online (Sandbox Code Playgroud)
它完全理解方法的工作方式.但现在我的问题是:为什么我们需要基类IDisposable?在此代码示例,我们定义了一个名为方法Dispose().当我到处读到该方法是IDisposable的一部分时,我们刚刚定义了该方法MyClass,如果我们不实现基类IDisposable或者我错误的假设,这段代码仍然有用吗?
我对C#并不是全新的,但我仍然需要学习很多东西,所以希望有人可以带领我朝着正确的方向前进.我检查了另一篇同样问题的帖子,但找不到它,所以如果它确实存在且它确实回答了我的问题,请带我到那里,我将删除这篇文章.
在我的代码中,我自然而然地,在没有考虑它的情况下,首先将派生结构类型转换为基础结构以调用重载函数,然后意识到它可能在某些情况下导致问题(尽管我老实说不知道是否哪个).
我的代码如下:
struct Base
{
//some variables
}
struct Derived : Base
{
//some more variables
}
bool func(const Base &base1, const Base &base2)
{
//do some stuff and return true or false
}
bool func(const Base &base, const Derived &derived)
{
if(func(base, (Base)derived))
return true;
else
//do some more stuff and return true or false
}
Run Code Online (Sandbox Code Playgroud)
代码编译,功能按预期工作.
我在SO和其他地方发现了很多关于向上和向下转换的问题,但它们都涉及使用指针而不是直接类型转换为基类.在这个链接中,人直接将类型转换为派生类而不是基类.我发现没有任何问题可以直接解决这个问题,但我可能根本就不知道该寻找什么,所以在这种情况下请指出正确的方向!
我假设(并在线阅读)类型转换涉及创建副本,因此(Base)derived不会简单地返回引用derived,而是使用第一个函数.我可能遇到任何其他缺点或问题吗?
好吧,在我的第一个编程课上.除了这一个,我做了所有的家庭作业.我无法完全理解要求我做的事情(与我读过的文字有关),所以我想我会问这里.
问:使用二维坐标系表示半径为10的飞镖板和挂在其上的墙,其中板的中心位于坐标(0,0)处.变量x和y存储飞镖命中的x和y坐标.使用变量x和y编写表达式,如果飞镖击中(位于)飞镖内,则计算结果为true,并计算这些飞镖坐标的表达式:
(0,0)(10,10)(6,-6)( - 7,8)
老实说,我不知道从哪里开始.救命?提示?
c# ×6
wpf ×4
base-class ×1
c ×1
c++ ×1
casting ×1
dialog ×1
events ×1
file ×1
formatted ×1
idisposable ×1
inheritance ×1
memory ×1
mouse ×1
overloading ×1
python ×1
slider ×1
timer ×1