首先,我很抱歉給我英語。
我嘗試爲RFID閱讀器編寫代碼,我想使用C#+ SignalR + Owin。
我有以下代碼。C#,SignalR,Owin自我主持人 - 我無法記錄事件
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如果我反覆MyHub類執行方法ReaderStart,我從讀者數據兩次,三次,等。
我有取消訂閱此處理程序,但是,它不起作用。 有人有什麼想法嗎?
感謝您的答案,但它不起作用。 TagToClientHandler不能是靜態的(對於非靜態的SignalR方法Clients.All.AnyClientFunction(tagNumber),我忘記寫入illustratice代碼),而rfidreader.TagToClient = null也不會起作用,因爲compiller返回異常「事件'Speedway.TagToClient'只能出現在+ =或 - =」的左側 – skybedy