StreamReader在读取文本文件时会锁定它.
我可以强制StreamReader以"只读"或"非锁定"模式工作吗?
我的解决方法是将文件复制到临时位置并从那里读取,但我更愿意直接使用StreamReader.任何替代建议?
背景:
我写了一个小应用程序来从日志文件中获取一些统计信息.该文件不断被外部程序更新(每秒几次),可以调用AAXXYY.
查看输出表明我的应用程序可能正在锁定文件并阻止AAXXYY写入.
这就是我正在做的事情
private void btnGetStats_Click(object sender, EventArgs e)
{
int countStarts = 0;
int countEnds = 0;
IList<string> sessions = new List<string>();
using(StreamReader stRead = new StreamReader(openFileDialog1.FileName,Encoding.Unicode))
{
while(!stRead.EndOfStream)
{
string line = stRead.ReadLine();
if(line.Contains("Session start"))
{
countStarts++;
sessions.Add(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
}
if (line.Contains("Session end"))
{
countEnds++;
sessions.Remove(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
}
}
}
txtStarts.Text = countStarts.ToString();
txtEnds.Text = countEnds.ToString();
txtDifference.Text = (countStarts - countEnds).ToString();
listBox1.DataSource = sessions;
}
Run Code Online (Sandbox Code Playgroud) 我在这里读过其他地方,要在文本框中捕获"Enter"键,并使用它就像按下按钮我应该将表单的KeyPreview属性设置为true并检查KeyDown的值.
我希望能够在几个TextBox控件上使用此功能,每个控件都与不同的Button相关联.
我的问题是如何知道哪个控件导致了KeyPress事件?发件人被列为表单本身.
G
在TreeNode拖放操作正在进行的同时,.Net 2.0中是否有任何内置函数可以扩展?
我在Visual Studio 2005中使用C#.
我已经Treeview使用多级多线树(想想组织结构图或文件/文件夹对话框)填充了一个控件,我想使用拖放来移动树中的节点.
拖放代码运行良好,我可以放到任何可见节点上,但我希望我的控件在Windows资源管理器窗格上拖动文件时的行为就像Windows资源管理器一样.具体来说,我希望每个文件夹打开,如果徘徊1/2秒左右.
我已经开始使用Threading和一种Sleep方法开发一个解决方案,但我遇到了问题,并且想知道是否已经存在某些问题,如果不是,我会指责并学习如何使用线程(这是关于时间的,但我希望快速获取此应用程序)
我是否需要编写自己的代码来处理TreeNode在拖放模式下盘旋时的扩展?
我是c#/ .net开发的新手,但我已经为我公司的一小部分资产组建了一个股票跟踪应用程序.我还设置了它在SQL 2000中连接的数据库.
当网络连接可用时,它目前工作得非常出色,但是当我远离连接时,我想扩展它以供使用.
首先,我需要知道是否有可用的连接.所以我把它放在一起:
private int availableNetAdapters()
{
int nicCount = 0;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
nicCount++;
}
}
return nicCount;
}
Run Code Online (Sandbox Code Playgroud)
似乎工作,但我必须测试"> 1",因为无论其他适配器状态如何,始终检测到"MS TCP环回接口".
是否有更好/更简单的方法来检查连接?
G
我正在我的一个子(模态)表单中使用NotifyIcon控件,它工作正常.按预期显示气球提示,处理鼠标事件等......但是,当我期望它时它不会消失.具体来说,当我退出子表单并且父级重新控制时,图标仍然存在.它的工具提示是可访问的,所以它非常"活着".
当我作为一个整体退出我的应用程序时,图像仍然保留,直到我将光标悬停在它上面.一旦被淹没,它就消失了.
我怎样才能让它正常运转?好的通常是一个坏词:-0当创建它的表单消失时,我怎么能让它消失?
有人可以解释导致这种情况的原因,我认为.net应该自行清理吗?
G
编辑:如果我以封闭的形式调用Dispose方法,这是有效的,但我真的必须这样做吗?G
使用C#和.Net 2.0,我使用的是不规则形状的表单(TransparencyKey,FormBorderStyle = None等等),并希望允许"正常"的边界模式.
我将背面颜色从Lime更改为默认值我将FormBorderStyle更改为FixedSingle我将TransparencyKey更改为Colour.None
不幸的是,这在屏幕上看起来完全混乱,图像向下跳跃几个像素并且向侧面和Lime绿色形式.
我认为这是由于在每行代码之后重新绘制表单引起的,是否可以暂停绘制表单直到我进行了更改然后只重绘一次表单?
G
Originaly在不同的论坛上发布了一段时间,希望我能在这里找到更多的帮助:)
嗨,大家好,
我确信这是一个非常基本的问题,但我是很多编程和C#的新手.我发现我需要清除几个控件上的数据绑定,目前有:
lblTableValue1.DataBindings.Clear();
lblTableValue2.DataBindings.Clear();
lblTableValue3.DataBindings.Clear();
lblTableValue4.DataBindings.Clear();
lblTableValue5.DataBindings.Clear();
lblTableValue6.DataBindings.Clear();
lblTableValue7.DataBindings.Clear();
Run Code Online (Sandbox Code Playgroud)
这不可能是做到这一点的最好方法吗?我还需要将所有这些文本值设置为"",我可以将它们分组并在整个组中调用清除吗?
非常感谢提前G.
c# ×6
.net ×5
winforms ×4
.net-2.0 ×1
concurrency ×1
controls ×1
dispose ×1
drawing ×1
filelock ×1
focus ×1
grouping ×1
hover ×1
logging ×1
networking ×1
notifyicon ×1
redraw ×1
transparency ×1
treeview ×1