我在C#.NET中编程.可以在不抛出异常的情况下中止类属性的set过程?
这是我想要做的......
public int RandomProperty
{
set
{
DialogResult answer = new DialogResult();
answer = MessageBox.Show("This process could take up to 5 min. Are you sure you want to continue?");
if(answer = DialogResult.No)
CancelSet // Can I do something similar here?
else
{
...Do set procedure
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为我可以使用方法(而不是属性),因为我使用propertygrid设置此值.
我试图在C中编写一个函数,它将根据时钟信号移出一个字节的各个位.到目前为止,我已经想到了......
void ShiftOutByte (char Data)
{
int Mask = 1;
int Bit = 0;
while(Bit < 8)
{
while(ClkPin == LOW);
DataPin = Data && Mask;
Mask = Mask * 2;
Bit++;
}
}
Run Code Online (Sandbox Code Playgroud)
其中DataPin表示我要将数据移出的端口引脚,而ClkPin是时钟端口引脚.
我希望器件从字节的LSB开始移出8位.出于某种原因,我的输出引脚始终保持高电平.我确信端口引脚配置正确,因此这纯粹是一个逻辑问题.
我有一个包含几个标准控件(文本框、按钮等)的表单。我想将某些控件分组到集合中,以便我可以在任何给定时间启用和禁用它们,而无需显式设置每个控件。这样做的语法是什么?这是一些伪代码来展示我想要做的事情......
Control[] ControlCollection = new Control[];
ControlCollection.add(Button1);
ControlCollection.add(TextBox1);
...
...
foreach( Control x in ControlCollection)
{
x.Enabled = false;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将控件放在一个组框中并完成此操作,但控件未以方便执行此操作的方式放置在窗体上。
我正在使用C语言编写程序,并将SDCC编译器用于8051架构设备.我正在尝试编写一个名为GetName的函数,它将从Flash Memory中读取8个字符并以某种形式返回字符数组.我知道不可能在C中返回一个数组,所以我试图用这样的结构来做:
//********************FLASH.h file*******************************
MyStruct GetName(int i); //Function prototype
#define NAME_SIZE 8
typedef struct
{
char Name[NAME_SIZE];
} MyStruct;
extern MyStruct GetName(int i);
// *****************FLASH.c file***********************************
#include "FLASH.h"
MyStruct GetName( int i)
{
MyStruct newNameStruct;
//...
// Fill the array by reading data from Flash
//...
return newNameStruct;
}
Run Code Online (Sandbox Code Playgroud)
我还没有任何对此函数的引用,但由于某种原因,我得到一个编译器错误,上面写着"函数无法返回聚合".这是否意味着我的编译器不支持返回结构的函数?或者我只是做错了什么?
我正在使用Silicon Labs IDE和SDCC编译器在C语言中为嵌入式设备编写固件.器件架构基于8051系列.有问题的功能如下所示.该功能用于设置MCU上的端口以驱动步进电机.它被一个中断处理程序调用.big switch语句只是将端口设置为下一个电机步骤的正确值.该功能的底部部分查看来自霍尔效应传感器的输入和移动的多个步骤,以便检测电机是否已停止.问题是,由于某种原因,看起来像这样的第二个IF语句if (StallDetector > (GapSize + 20))
{
HandleStallEvent();
}似乎总是被优化出来.如果我尝试在HandleStallEvent()通话时设置断点,IDE会给我一条消息,说"此行号没有地址关联".我在阅读汇编时并不是很擅长讲述它正在做什么,但我已经从下面的asm输出中粘贴了一个片段.任何帮助将非常感激.
void OperateStepper(void)
{
//static bit LastHomeMagState = HomeSensor;
static bit LastPosMagState = PosSensor;
if(PulseMotor)
{
if(MoveDirection == 1) // Go clockwise
{
switch(STEPPER_POSITION)
{
case 'A':
STEPPER_POSITION = 'B';
P1 = 0xFD;
break;
case 'B':
STEPPER_POSITION = 'C';
P1 = 0xFF;
break;
case 'C':
STEPPER_POSITION = 'D';
P1 = 0xFE;
break;
case 'D':
STEPPER_POSITION = 'A';
P1 = 0xFC;
break;
default:
STEPPER_POSITION = 'A'; …Run Code Online (Sandbox Code Playgroud) 我正在研究具有多种形式的C#应用程序.
当我打开其中一个表单时,我添加了一个这样的事件监听器:SomeClass.MotionCompleted += new EventHandler(HandlerMethod);.MotionCompleted事件是一个静态事件.
我注意到,在关闭此表单后,HandlerMethod仍会在事件发生时被调用,然后导致异常,因为它试图更新表单上不再存在的内容.
eventlistener如何存在并响应事件,即使表单不再存在?一旦调用了form.Close()或this.Close(),就不应该自动取消挂钩事件列表器,以便它们不再被调用?
我在C#.NET中编程.我有一个字符串,其中包含一个带有句点作为小数的数字.无论本地化/语言设置如何,我如何正确地将其解析为双精度.字符串值将始终相同.
我想我需要使用double.Parse(string s, IFormatProvider i)解析的重载但我不明白如何使用它.
我是C编程的新手.我想当你输入类似的东西时#define Const 5000,编译器只是在编译时将每个Const的实例替换为5000.那是错的吗?我尝试在我的代码中执行此操作,并且出现语法错误.为什么我不能这样做?
#define STEPS_PER_REV 12345
... in some function
if(CurrentPosition >= STEPS_PER_REV)
{
// do some stuff here
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨if语句带有语法错误,但没有给出任何详细信息.
我有一个用C#.NET编写的软件,它通过USB与设备通信.出现问题时,设备会设置一个错误代码,该错误代码由我的软件以整数形式读取.我想在我的C#程序中存储与特定固件错误代码相关的错误消息.存储这些的最佳方法是什么?
有人告诉我,一个好的方法是使用资源文件.使用资源文件有什么好处?有没有更好的方法呢?
在C程序中,我看到以下声明:
memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress, sizeof(AppConfig.MyMACAddr));
Run Code Online (Sandbox Code Playgroud)
(void*)案例是做什么的?这是为Microchip C30编译器编写的.
AppConfig的定义如下:
APP_CONFIG AppConfig; // APP_CONFIG is obviously a structure...
Run Code Online (Sandbox Code Playgroud)
SerializedMACAddress定义如下:
static ROM BYTE SerializedMACAddress[6] = {MY_DEFAULT_MAC_BYTE1, MY_DEFAULT_MAC_BYTE2, MY_DEFAULT_MAC_BYTE3, MY_DEFAULT_MAC_BYTE4, MY_DEFAULT_MAC_BYTE5, MY_DEFAULT_MAC_BYTE6};
Run Code Online (Sandbox Code Playgroud)
编辑:我之前应该说过这个,但memcpypgm2ram定义为:#define memcpypgm2ram(a,b,c)memcpy(a,b,c)
基本上, void *memcpy(void *dest, const void *src, size_t n);
c ×5
c# ×4
.net ×2
sdcc ×2
8051 ×1
abort ×1
arrays ×1
bit-shift ×1
casting ×1
collections ×1
controls ×1
double ×1
formclosing ×1
function ×1
if-statement ×1
localization ×1
optimization ×1
parsing ×1
pointers ×1
properties ×1
set ×1
struct ×1
void ×1
winforms ×1