小编Jas*_*ith的帖子

当事件被引发一次时,多次调用c#事件处理程序

下面是我的代码,首先是我提出事件的地方,第二部分是我在另一个类中使用它的地方.它看起来很简单,但是日志显示即使事件被提升一次,事件也会在消耗此事件的类上触发20次以上.有任何想法吗?

IBSerialPort 类:

public delegate void PacketReceivedHandler(object sender, PacketReceivedEventArgs e);
public event PacketReceivedHandler OnPacketReceived;

public class PacketReceivedEventArgs : EventArgs
{
  public Packet PacketReceived { get; private set; }

  public PacketReceivedEventArgs(Packet packet)
  {
    PacketReceived = packet;
  }
}

// raise event
if (OnPacketReceived != null)
{
    Log("This is only called ONCE!");
    PacketReceivedEventArgs args = new PacketReceivedEventArgs(data);
    OnPacketReceived(this, args);
}
Run Code Online (Sandbox Code Playgroud)

使用IBSerialPort和使用其OnPacketReceived事件的类:

IBSerialPort ibSerialPort = null;
..
if (ibSerialPort == null)
{
  Log("This is only called once");

  ibSerialPort = …
Run Code Online (Sandbox Code Playgroud)

c# events serial-port raiseevent

8
推荐指数
2
解决办法
8952
查看次数

xamarin选取器控制selectedindexchange事件仅在完成拾取项目时引发

我正在使用Xamarin.Forms.Picker控件并处理SelectedIndexChanged事件.

用户通过选择器控件中的项目滚动,然后用户选择预先构建到选取器控件中的"完成"按钮.无论如何,当用户按下"完成"而不是在索引改变时捕获.

当用户滚动项目时,索引可以多次更改,我不想处理不必要的事件,因为我只关心最后选择的项目.

提前致谢

<Picker x:Name="PickerMinStars" Title="Min number of 5 stars"  SelectedIndexChanged="Handle_PickerStarsSelectedIndexChanged">
        </Picker>
Run Code Online (Sandbox Code Playgroud)

c# picker xamarin.ios xamarin xamarin.forms

4
推荐指数
3
解决办法
4876
查看次数

立即执行 oracle 字符串连接问题

我在连接要立即执行的字符串时遇到问题。任何人都知道下面的陈述有什么问题。

EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''||SMTPServer||''';

select smtpserver into SMTPServer from mytable;

if(SMTPServer is not null)
then
  EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''||SMTPServer||''';
  --*****above does not work, below does work****
  EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''10.1.1.1''';
Run Code Online (Sandbox Code Playgroud)

oracle plsql concatenation execute utl-mail

2
推荐指数
1
解决办法
4801
查看次数

串口线程锁,同时处理从串口读取的数据

我有一个事件处理程序,只要在串行端口上接收到数据,它就会被调用,一旦调用此事件,我就会处理单个字节的数据,直到处理完所有数据。

我的问题是,如何确保这个 IBSerialPort_DataReceived 事件处理程序在我第一次被调用时仍在处理字节时不会再次被异步调用,即我想保证 ProcessByte 方法只在一个线程上执行一次。

void IBSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  while (BytesToRead > 0)
  {
    ProcessByte((byte)ReadByte());
  }
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading asynchronous serial-port locks

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