我在这里和这里研究了asynch和await语法.理解使用情况确实很有帮助,但我在MSDN上找到了一个有趣的语法示例,我只是不明白.
问:有人可以向我解释这个System.Timers.Timer事件注册的语法与asynch await:为什么你可以使用async awaitlambda表达式中已有的关键字?
Timer timer = new Timer(1000);
timer.Elapsed += async ( sender, e ) => await HandleTimer();
private Task HandleTimer()
{
Console.WriteLine("\nHandler not implemented..." );
}
Run Code Online (Sandbox Code Playgroud)
问题2:
什么是两个参数sender和e好,如果他们不出现在HandleTimer方法?
我正在使用 TwinCAT.Ads (TwinCAT 3) 通过 c# 应用程序进行 Beckhoff plc 通信。应用程序正在读取和写入少量 plc 变量。我收到一个错误:
“无法封送对象。参数名称:值”
在编写结构变量数组时。但是,应用程序正在读取它而没有任何错误。任何帮助将不胜感激。下面是我的代码示例。
Plc中的结构
TYPE Station :
STRUCT
ClusterID : STRING[10];
Tech_Type : USINT;
Status : BOOL;
Reject : BOOL;
Rej_Detail : STRING[50];
Rej_Catagory : USINT;
END_STRUCT
END_TYPE
Run Code Online (Sandbox Code Playgroud)
C#中的类
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class Station
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 11)]
public string ClusterID;
public byte Tech_Type;
[MarshalAs(UnmanagedType.I1)]
public bool Status;
[MarshalAs(UnmanagedType.I1)]
public bool Reject;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 51)]
public string Rej_Detail;
public byte Rej_Catagory;
}
Run Code Online (Sandbox Code Playgroud)
我正在用下面的代码编写,其中handles[0]是变量句柄, …
我想知道如何获取动态类型的属性.
这是获取List的功能,
var result = _files.GetFileContent(reportId).Result;
Run Code Online (Sandbox Code Playgroud)
作为示例,我得到一个像这样返回的对象:
当我打开它时,你可以看到我拥有的属性:
这个想法是我永远不知道这些属性.它们可以随着时间而改变.所以我想要一个充满所有属性的列表.所以我可以动态使用它们.
如何从第一项获得属性(ChargesDelta_DIFF_5,ChargesEfile_RIGHT,ChargesGecep_LEFT等)?
我正在读取一些存储为 long 的 Microsoft FileTime 值,并尝试将其转换为人类可读的日期。
例如,该值131733712713359180转换为:Wednesday, June 13, 2018 1:47:51pm。这是使用在线工具完成的,此处:在线时间转换器
我在 Java 中运行得很好,但是当我尝试在 C# 中运行时,我得到了错误的年份。我得到的输出是:13/06/0418 13:47:51。
我用来进行转换的代码是:
public string CalculateTimestamp(Int64 epoch)
{
DateTime date = DateTime.Now;
try
{
date = new DateTime(epoch);
DateTime filetime = new DateTime(date.ToFileTime());
result = filetime.ToString();
}
catch (Exception uhoh)
{
result = "failedtoparsetimestamp";
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
在 Java 中进行转换时,这是我正在使用的代码。
public String calculateTimeStamp(long epoch) {
if (epoch == 0) {
return "--";
}
long unixDifference = 11644473600000L; …Run Code Online (Sandbox Code Playgroud) List<int> lista = new List<int>() { 3, 4, 9, 8, 5, 6, 0, 3, 8, 3 };
int number = lista.Count(n => n <= 5);
Run Code Online (Sandbox Code Playgroud)
我知道我们用这些数字创建列表……但是我们如何得到 6?不明白 (n => n <= 5) 这实际上发生了什么。
我有这个代码:
private string _class;
public string Class
{
get
{
return string.IsNullOrEmpty(_class) ? "preview" : _class;
}
set
{
_class = value;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用表达式体来简化?
我正在学习使用 Emgu CV 并偶然发现了这个 Open CV 示例:http ://aishack.in/tutorials/tracking-colored-objects-in-opencv/
我想CvInRange通过创建以下代码在 Emgu 中重新创建函数:
// create upper & lower limit (HSV)
MCvScalar botLimit = new MCvScalar(20, 100, 100);
MCvScalar uprLimit = new MCvScalar(30, 255, 255);
// prepare the destination
Image<Hsv, byte> imageHSVDest = new Image<Hsv, byte>(imageWidth, imageHeight);
//
CvInvoke.cvInRange(imageHSV, botLimit, uprLimit, imageHSVDest);
Run Code Online (Sandbox Code Playgroud)
在CvInvoke.cvInRange()产生此错误消息(在VS2010):
错误 1 'Emgu.CV.CvInvoke.cvInRange(System.IntPtr, System.IntPtr, System.IntPtr, System.IntPtr)' 的最佳重载方法匹配有一些无效参数
错误 2 参数 2:无法从 'Emgu.CV 转换.Structure.MCvScalar' 到 'System.IntPtr' 错误 3 参数 3:无法从 'Emgu.CV.Structure.MCvScalar' 转换为 'System.IntPtr'
似乎存在不匹配的数据类型。我寻觅如何Emgu转换MCvScalar到 …
我有一个SerialPort流量控制设置为1.如何在c#中设置它.char我的端口设置中有换行符,我认为与流量控制不同.到目前为止我的端口设置如下.有人可以帮我设置流量控制吗?谢谢.
SerialPort _comm = new SerialPort
{
PortName = string.Concat("COM", comPort),
BaudRate = 9600,
Parity = Parity.None,
DataBits = 8,
StopBits = StopBits.One,
ReadTimeout = 1000,
WriteTimeout = 5000,
NewLine = "\r"
};
Run Code Online (Sandbox Code Playgroud) 我是初学者学习c#,我有这个代码
static void Main(string[] args)
{
int a = 0;
while (a < 100)
{
a = a + 1;
if ((a % 10) == 0)
{
Console.WriteLine(a);
}
else
{
Console.Write(a);
Console.Write(",");
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来编写这段代码?我觉得在c#中可能有更好的方法.这是我的第一个代码.我将不胜感激.谢谢
我找到了这段代码:
Task task = DoSomethingAsync( someObject );
await task.ConfigureAwait( false );
if ( task.IsCompleted ){ ... }
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以安全地将其替换为
await DoSomethingAsync( someObject ).ConfigureAwait( false );
Run Code Online (Sandbox Code Playgroud)
并删除 if 子句。
我的问题:task.IsCompleted当等待的任务返回时,可能会出现错误吗?
IsCompleted 的文档告诉我们:
true如果任务已完成(即任务处于三种最终状态之一:RanToCompletion、Faulted 或 Canceled);否则,false。
我查找了可能的状态,但我仍然不清楚当等待的任务返回时哪些状态是可能的。
请帮助我阐明这个问题。提前谢谢。
c# ×10
async-await ×2
asp.net ×1
asynchronous ×1
dynamic ×1
emgucv ×1
events ×1
filetime ×1
java ×1
lambda ×1
list ×1
object ×1
resharper ×1
serial-port ×1
task ×1
timer ×1
twincat ×1
twincat-ads ×1
windows ×1