まず、私は英語のために申し訳ありません。
私は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)には連続性があります)、rfidreader.TagToClient = nullも機能しません。 "イベント 'Speedway.TagToClient'は、+ =または - =" – skybedy