イベントでデータを渡す必要があります。現在、より多くのデータ(comport経由)を受け取ると、イベントは発生しますが、前のイベント(&データ)はまだ処理されないので、データは上書きされます。
イベント&のデータを安全に処理するにはどうすればよいですか?私はこのような複数のイベント(15x)を持っているので、データのキューを使用するのが最良の方法であるかどうか、またはイベント(データ項目4215845など)とともにデータを渡すかどうかはわかりません。イベントでデータを渡す
例(この例では、文字列であるが、私はまた、アレイ、boolsなどを使用する):「送信者側(クラス1)で
:
public event EventHandler evDiaStringMessage = delegate { };
private void evDiaStringMessageEvent()
{
evDiaStringMessage(this, new EventArgs());
}
private static string _DiaString;
public string DiaString
{
get { return _DiaString; }
set { _DiaString = value; }
}
DiaStringにデータが含まれており、取得evDiaStringMessageがすぐに起動されたときに上書きされます。 '受信機/ GUI' 側(クラス2)で
:
dia.evDiaStringMessage += new EventHandler(dia_evDiaStringMessage);
private delegate void dia_evDiaStringMessageCallBack(object sender, EventArgs e);
void dia_evDiaStringMessage(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new dia_evDiaStringMessageCallBack(dia_evDiaStringMessage), new object[] { sender, e});
}
else
{
frmcomm.CommTextBox("Receiver message: " + dia.DiaString + "\r\n", Color.Red);
}
}
dia.DiaStringは、予想されるデータ(前回データ)が含まれていないが、すべてのイベントが '受信' されます。
ご協力いただきありがとうございます。さらに例を挙げましょう!
編集:「送信者側(クラス1)で
:
私はにコードを変更する時
public event EventHandler<DiaStringEventArgs> evDiaStringMessage ;
public class DiaStringEventArgs : EventArgs
{
public string DiaString { get; set; }
}
private void evDiaStringMessageEvent(DiaStringEventArgs e)
{
EventHandler<DiaStringEventArgs> handler = evDiaStringMessage;
if (handler != null)
handler(this, e);
}
...
private void PrepareDataAndFireEvent()
{
DiaStringEventArgs args = new DiaStringEventArgs();
args.DiaString = ByteToString(data);
evDiaStringMessageEvent(args);
}
'レシーバ/ GUI'側(class2):
dia.evDiaStringMessage += new EventHandler<ifDiA10.DiaStringEventArgs>(dia_evDiaStringMessage);
private delegate void dia_evDiaStringMessageCallBack(object sender, ifDiA10.DiaStringEventArgs e);
void dia_evDiaStringMessage(object sender, ifDiA10.DiaStringEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new dia_evDiaStringMessageCallBack(dia_evDiaStringMessage), new object[] { sender, e});
}
else
{
frmcomm.CommTextBox("Receiver message: " + e.DiaString + "\r\n", Color.Red);
}
}
まず、EventHandlerを['EventHandler'](http://msdn.microsoft.com/en-us/library/db0etb8x.aspx)に置き換えて、引数を渡す可能性を与えますイベントハンドラ。 –