我有一个字节数组,看起来像这样:
byte[] exampleArray = new byte[]
{ 0x01, 0x13, 0x10, 0xe2, 0xb9, 0x13, 0x10, 0x75, 0x3a, 0x13 };
Run Code Online (Sandbox Code Playgroud)
我的最终目标是在看到序列的任何时候将这个数组拆分成子数组{ 0x13, 0x10 }.所以我在示例数组上的期望结果将是:
{ 0x01 }
{ 0xe2, 0xb9 }
{ 0x75, 0x3a, 0x13 }
Run Code Online (Sandbox Code Playgroud)
理想情况下,我还需要知道最终数组{ 0x75, 0x3a, 0x13 }并没有以搜索顺序结束,因此我可以将其作为一个特例来处理.
有关最佳方法的任何想法?
我在VS2010工作了大约两年的大型项目.我刚获得了VS2012的许可证,但我担心如果我删除VS2010并尝试在VS2012中处理该项目可能会发生什么.
这是一种非理性的恐惧,还是会有问题让项目编译?我的项目是C#,.Net 4,Winforms应用程序.
理想情况下,我只是在另一台计算机上加载VS2012并试一试,但我目前在计算机上运行时间不足.我已经读到了联合安装VS2010和VS2012的一些弊端.
我正在使用MessageBox不时为用户弹出警报消息.我的特定应用程序可以设置为远程运行,因此有时用户位于计算机前,有时用户可能不在计算机前几小时甚至几天.有时我会弹出一条警报消息MessageBox但在一段时间后警报不再相关.例如,我弹出一个警告,由于某些标准未得到满足,无法完成任务.几分钟后,该标准得到满足,任务就开始了.这MessageBox已不再适用.
我希望能够以编程方式关闭MessageBox这些消息不再相关的情况.这可能吗?目前我MessageBox使用以下方法在线程中创建我的对象:
new Thread(() => MessageBox.Show("Some text", "Some caption")).Start();
Run Code Online (Sandbox Code Playgroud)
我这样做,以便应用程序可以继续在后台工作,而不会被停止MessageBox.有什么建议?
我有一个自定义控件,我在控件的Load事件中进行了一些位置检查.此位置检查根据其父控件中的设置将控件移动到屏幕上的特定位置.编译和运行应用程序时,此代码按预期工作.
但是,在使用Visual Studio设计器时,它会导致我的控件被绘制在可视区域之外,我无法使用设计器.是否有一个标志或属性,我可以设置为停止在Visual Studio设计器中运行该代码片段?
我现在唯一的工作就是注释掉代码,编译,启动设计器,进行更改,然后取消注释代码并重新编译.
我正在编写一个与一台测试设备交谈的界面.设备通过串行端口进行通信,并以发送的每个命令以已知的字节数进行响应.
我目前的结构是:
但是,当我使用SerialPort.Read(byte [],int32,int32)时,该函数没有阻塞.因此,例如,如果我调用MySerialPort.Read(byteBuffer, 0, bytesExpected);,则函数返回的值小于指定的数量bytesExpected.这是我的代码:
public bool ReadData(byte[] responseBytes, int bytesExpected, int timeOut)
{
MySerialPort.ReadTimeout = timeOut;
int bytesRead = MySerialPort.Read(responseBytes, 0, bytesExpected);
return bytesRead == bytesExpected;
}
Run Code Online (Sandbox Code Playgroud)
我将此方法称为:
byte[] responseBytes = new byte[13];
if (Connection.ReadData(responseBytes, 13, 5000))
ProduceError();
Run Code Online (Sandbox Code Playgroud)
我的问题是,我似乎无法像我所说的那样读取完整的13个字节.如果我Thread.Sleep(1000)在我的SerialPort.Read(...)一切正常之前放好了.
Read在超出timeOut或读取指定的字节数之前,如何强制方法阻塞?
我正在使用PropertyGrid控件并使用SelectedObject属性来显示数据PropertyGrid.我的网格中的一些属性是枚举类型.我希望能够做的是隐藏用户枚举中的一些选择.以下面的示例:我想隐藏用户的"错误"枚举.有没有办法做到这一点?
[TypeConverter(typeof(PropertySorter))]
public class Settings
{
public enum FooType { Type1, Type2, Type3, Type4, Error };
private FooType fakeProperty = FooType.Type1;
public FooType FakeProperty
{
get { return fakeProperty; }
set { // Do Something }
}
}
Run Code Online (Sandbox Code Playgroud)
我正在PropertyGrid通过调用显示数据:
myPropertyGrid.SelectedObject = mySettings;
Run Code Online (Sandbox Code Playgroud) 我有一个switch语句,如下所示:
switch (condition)
{
case 0:
case 1:
// Do Something
break;
case 2:
// Do Something
case 3:
// Do Something
break;
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误告诉我 Control cannot fall through from one case label ('case 2:') to another
嗯......是的,你可以.因为你是从做它case 0:通过对case 1:.
事实上,如果我删除了我case 2:和它的相关任务,代码就会编译并从中case 0:进入case1:.
那么这里发生了什么,我怎样才能让我的case语句通过并执行一些中间代码?
new System.Threading.Thread(() =>
{
var myObject = new CustomObject();
myObject.SomeEvent += SomeMethod;
}).Start();
Run Code Online (Sandbox Code Playgroud)
第1部分:假设我在winforms应用程序中的主UI线程上运行上面的代码.哪个Thread会SomeMethod发生呼叫?它们是否会在Thread我创建对象时创建的相同?
第2部分:使用Visual Studio 2010,我如何自己解决这个问题?我不知道你在哪里发现了什么Thread东西在运行.
我有一些C代码,我试图转换成C#代码,我正在运行我不熟悉的指针,所以我不知道C#等价.我得到一些帮助吗?
案例1:在C中给出这三行,如何在C#中声明p?
double snorm[169];
double *p = snorm;
*p = 1.0;
Run Code Online (Sandbox Code Playgroud)
案例2:我不知道指针实际上是做什么的,所以我不知道如何将这一行改为C#.
*(snorm+n) = *(snorm+n-1) * (double)(2*n-1) / (double)n;
Run Code Online (Sandbox Code Playgroud) public static readonly byte[] TestArray=
new byte[] { 0x75, 0xa5, 0x15, 0x19, 0xa0, 0x2e, 0xd9, 0x37, 0xb0, 0x4d };
public bool TestFunction()
{
MemoryStream s=new MemoryStream(
new byte[] { 0x75, 0xa5, 0x15, 0x19, 0xa0, 0x2e, 0xd9, 0x37, 0xb0, 0x4d }
);
byte[] test=s.ToArray();
return (test==TestArray);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用上面的简单代码.数组中的字节值相等.但我TestFunction()总是回归虚假.到底是怎么回事?
我在 Excel 中有一系列包含各种正数和负数的单元格。单元格的值由 IF 公式确定,区域中的某些单元格没有值 ("")。
我需要找到最接近 0 的单元格的绝对值。因此,如果我有一个包含 -10、-5、-1、3、6 和“”的列表:我需要得到结果 1。
我尝试了多种方法,但事实上我有非数字单元格似乎是导致错误的问题。
我尝试过的:
{=Min(ABS(A1:D10))},我按 Ctrl-Shift-Enter(由于非数字而返回错误)
{=IF(MAX(D3:D22)<=0,-1,IF(MIN(ABS(D3:D22))=MIN(ABS(IF(D3:D22>0,D3:D22,MAX(D3:D22)))),1,-1))*MIN(ABS(D3:D22))},我按 Ctrl-Shift-Enter(由于非数字而返回错误)
{=IF(OR((D3:D22)>0),MIN(ABS(D3:D22)),-MIN(ABS(D3:D22)))},我按 Ctrl-Shift-Enter(由于非数字而返回错误)
可能重复:
C#中字符串前面的@是什么?
这是我长期以来质疑的事情,但从来没有费心去弄清楚.当我下载第三方库时,我经常在字符串@之前使用符号看到字符串赋值.
string myString = @"Some text";
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,似乎绝对没有区别
string myString = "Some text";
Run Code Online (Sandbox Code Playgroud)
那是@做什么的?
我有一个像这样的对象:
public class SavedFileInfo
{
public String Address;
public Int32 DataPort;
public Int32 AudioPort;
public String Description;
public String Filename;
}
Run Code Online (Sandbox Code Playgroud)
我有一个这样的对象数组...... SavedFileInfo[] mySFI;
我现在如何string[] filenames从我的SavedFileInfo对象集合中获取Filename字段的数组(例如)?
c# ×11
.net ×5
winforms ×4
arrays ×3
blocking ×1
bytearray ×1
c ×1
compare ×1
enums ×1
excel ×1
fall-through ×1
field ×1
ide ×1
messagebox ×1
min ×1
object ×1
parsing ×1
propertygrid ×1
serial-port ×1