Во-первых, извините за меня.
Я пытаюсь написать код для считывателя RFID, и я бы хотел использовать C# + SignalR + Owin.
У меня есть следующий код.C#, SignalR, Owin self host - я не могу отменить события
namespace SignalRSelfHost {
using System;
using Microsoft.Owin.Hosting;
using Microsoft.AspNet.SignalR;
using Owin;
using Microsoft.Owin.Cors;
using ReaderSDK;
class Program{
static void Main(string[] args) {
using (WebApp.Start<Startup>("http://localhost:8080/")) {
Console.WriteLine("Server running at http://localhost:8080/");
Console.ReadLine();
}
}
}
public class Startup {
public void Configuration(IAppBuilder app) {
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
//class for basic reader settings with reader event + event handler
public class RFIDReader {
public Reader reader = new Reader();
//definition event, what I'll fire for MyHub class
public event Action<string> TagToClient;
public RFIDReader() {
try {
//connect to reader
reader.Connect("xx.xx.xx.xx");
// event from reader and handler
reader.TagsComing += TagsComingHandler;
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
//handler for event readerTagsComming
void TagsComingHandler(Reader sender, Tags packet) {
foreach (Tag tag in packet) {
//fire event for MyHub class
TagToClient(tag.toString());
}
}
}
//MyHub class for communication via SignalR
public class MyHub : Hub {
static RFIDReader rfidreader = new RFIDReader();
// this method is activated from JavaScript client of course
// JavaScript client code is not relevant for this example
public void ReaderStart() {
//start of reader reads
rfidreader.start();
//here I want unsucribe handler - it doesn't works
rfidreader.TagToClient -= TagToClientHandler;
//here I subcribe handler
rfidreader.TagToClient += TagToClientHandler;
}
//handler for event TagToClient
void TagToClientHandler(string tagNumber){
Console.WriteLine(tagNumber);
}
//this method is also activated from JavaScript client
public void ReaderStop() {
//stop of readers reads
rfidreader.stop();
}
}
}
Моя проблема в том, что я не в состоянии unsucribe обработчик события TagToClientHandler и если я повторно выполнить метод ReaderStart в классе MyHub, я получаю данные от читателя дважды, трижды, и т.д ..
меня там отмена подписки на этот обработчик, однако, он не имеет никакого эффекта. Есть ли у кого-нибудь идеи?
Спасибо за ответ, однако он не работает. TagToClientHandler не может быть статическим (существует непрерывность для нестатического метода SignalR Clients.All.AnyClientFunction (tagNumber), который я забыл написать в код иллюстрации) и rfidreader.TagToClient = null тоже не работает, поскольку компилятор возвращает исключение «Событие« Speedway.TagToClient »может появляться только с левой стороны + = или - =" – skybedy