小编Eat*_*aco的帖子

如何在winforms应用程序中优雅地处理休眠/睡眠模式?

我正在使用C#在.net中编写一个Windows窗体应用程序.

我遇到一个问题,如果我的程序在计算机进入睡眠和/或休眠状态时运行(我不确定此时哪一个,或两者都导致问题),当机器再次唤醒时该程序只是挂起.退出它的唯一方法是从任务管理器中终止进程.

出于显而易见的原因,这不是我希望程序运行的方式.即使我只是在程序进入这些状态时关闭程序,那也没关系,但我不太清楚如何做到这一点,或者是否有更优雅的方式来处理这个问题.

.net c# events winforms hibernate-mode

16
推荐指数
2
解决办法
4669
查看次数

异常后关闭流

我打开一个流,然后反序列化流中的数据.但是,我向SavedEventSet对象添加了一个成员,所以现在当我尝试打开一个旧文件时,它会在反序列化行上抛出异常.

这对我很好(现在),但问题是我处理异常,但从不关闭流(因为异常发生在我关闭流之前),所以当我再次尝试打开文件时,它不会让我因为它正在使用中.

如何在此异常后关闭流?如果我将stream.Close()放在catch或finally中,它会抱怨尝试访问未分配的局部变量.看起来不好的做法就是打开我知道的随机文件.有没有办法以类似于空构造函数的方式打开流,所以看起来它被分配了?

谢谢

SavedEventSet sES;
OpenFileDialog oFD = new OpenFileDialog();
Stream stream;
BinaryFormatter bF;

try
{
    oFD.InitialDirectory = this.path;
    oFD.Title = "Open Event Saved File.";
    oFD.ShowDialog();

    if(oFD.FileName.Contains(".sav"))
    {
        stream = File.Open(oFD.FileName, FileMode.Open);
        bF = new BinaryFormatter();

        sES = (SavedEventSet)bF.Deserialize(stream);
        stream.Close();

    }
}
catch (Exception ex)
{
    stream.Close();
    /*handle Exception*/
}
Run Code Online (Sandbox Code Playgroud)

.net c# serialization stream

12
推荐指数
2
解决办法
4626
查看次数

鼠标悬停,工具提示多次显示

我有一个自定义控件(C#,visual studio).我想在mousehover事件上显示工具提示.

但是,无论我做什么,它要么从未显示,要么有机会多次显示.

我认为它会像下面这样简单:

private void MyControl_MouseHover(object sender, EventArgs e)
{
    ToolTip tT = new ToolTip();

    tT.Show("Why So Many Times?", this);
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我尝试了很多东西,但似乎无法让它发挥作用.我想让工具提示成为组件的一部分,因为我想从中访问私有字段以供显示.

谢谢你的帮助

c# tooltip mousehover

5
推荐指数
1
解决办法
5631
查看次数

将数据保存到.net中的文件时的良好编码实践

给出一点背景知识.

我创建了一个应用程序,允许用户保存设置,然后在以后调用设置.为此,我创建了一些可序列化的对象.我已经使用BinaryFormatter工作而没有太多麻烦.

我开始遇到问题的地方是我升级软件并添加新设置.现在我的可序列化对象不匹配,所以我必须更新文件.我已成功完成了几个版本.但要做到这一点,我尝试反序列化文件,如果它抛出异常,我尝试使用下一个版本..然后是下一个..然后是下一个...直到找到合适的人 然后我必须为每个旧版本编写转换函数,以将其转换为最新版本.我也创建了一个"修订版"文件,所以我可以检查一下他们有什么版本然后升级它,但是我仍然需要保留很多不同的"版本"并为所有这些版本编写转换函数...这似乎对我来说本质上是凌乱的,如果我继续走这条路线,后来就容易臃肿.

必须有一个更好的方法来做到这一点,我只是不确定如何.

谢谢

.net c# file-io

5
推荐指数
1
解决办法
803
查看次数

有效使用OnPaint

我在Visual Studio .Net中编程并使用C#.

我正在创建自己的控件,根据从模数转换器(ADC)获得的值来绘制波形.我将传入点转换为X和Y点,以便在我的控制中正确绘制图形.

我的OnPaint方法中有一个循环遍历所有点并在当前点和下一个点之间调用DrawLine方法.

然而,这是非常低效的,因为这些图中的一些具有8192个点并且系统实际上具有我想要同时显示的九个ADC.每次页面重绘时,所有图形重绘都需要几乎一秒钟(特别是在调试期间).

最重要的是,我有一些功能,允许你放大和平移波浪以获得更好的视图(行为很像谷歌地图)和所有9波放大和平移.

所有这些功能都非常"生涩",因为我在mousewheel和mousemove上调用invalidate.基本上,这一切都有效但不如我想的那么顺利.

我想知道是否有办法从数据中创建预绘制对象,然后在绘图区域中绘制图片的扩张和翻译版本.

即使它只是指向正确的方向,任何帮助将不胜感激.

.net c# graphics onpaint

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

.Net如何获得UTC?

我正在考虑将我们的应用程序的时间从本地转换为UTC.然而,有人问了它如何计算UTC,我不知道自己.我做了一个搜索,但没有在任何地方看到答案.

它只是根据时区转换当地时间吗?

如果是这样,有没有办法解释时间已关闭且没有互联网连接的计算机?(我想不是,但我想我会问).

.net time datetime

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