小编Mon*_*Zhu的帖子

请解释Timer事件async/await语法

我在这里这里研究了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: 什么是两个参数sendere好,如果他们不出现在HandleTimer方法?

c# events asynchronous timer async-await

4
推荐指数
1
解决办法
2969
查看次数

通过 C# 应用程序使用 TwinCAT.Ads 编写结构数组

我正在使用 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]是变量句柄, …

c# twincat twincat-ads twincat-ads-.net

4
推荐指数
1
解决办法
4037
查看次数

获取动态类型的属性

我想知道如何获取动态类型的属性.

这是获取List的功能,

var result = _files.GetFileContent(reportId).Result;
Run Code Online (Sandbox Code Playgroud)

作为示例,我得到一个像这样返回的对象:

在此输入图像描述

当我打开它时,你可以看到我拥有的属性:

在此输入图像描述

这个想法是我永远不知道这些属性.它们可以随着时间而改变.所以我想要一个充满所有属性的列表.所以我可以动态使用它们.

如何从第一项获得属性(ChargesDelta_DIFF_5,ChargesEfile_RIGHT,ChargesGecep_LEFT等)?

c# model-view-controller dynamic object

4
推荐指数
2
解决办法
6790
查看次数

文件时间转字符串

我正在读取一些存储为 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)

c# java windows filetime

4
推荐指数
1
解决办法
2165
查看次数

为什么输出是 6 而不是其他数字?

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) 这实际上发生了什么。

c# lambda list

4
推荐指数
1
解决办法
236
查看次数

体型不一致,使用表情体

我有这个代码:

private string _class;
public string Class
{
    get
    {
        return string.IsNullOrEmpty(_class) ? "preview" : _class;
    }
    set
    {
        _class = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用表达式体来简化?

c# asp.net resharper

4
推荐指数
1
解决办法
4257
查看次数

如何在 Emgu CV 中使用 CvInRange

我正在学习使用 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到 …

c# emgucv

3
推荐指数
1
解决办法
1万
查看次数

如何设置串口流量控制?

我有一个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# serial-port

3
推荐指数
1
解决办法
7501
查看次数

在c#中显示从1到100的数字,使每行以模数10结束

我是初学者学习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#中可能有更好的方法.这是我的第一个代码.我将不胜感激.谢谢

c#

3
推荐指数
1
解决办法
67
查看次数

等待的任务可以在 IsCompleted 中返回 false

我找到了这段代码:

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# task async-await

3
推荐指数
1
解决办法
523
查看次数