C# 我想使用线程通过信号器发送通知

C# 我想使用线程通过信号器发送通知,c#,asp.net-mvc,signalr,C#,Asp.net Mvc,Signalr,我想使用线程发送通知。我已经创建了一个线程,它在无限时间内迭代。这是我的密码 public static class ThreadStartUp { public static void GetThread() { var thread = new Thread(ReminderHelperClas.IterateMethod); thread.Start(); } } 我的带有方法的静态类是 公共静态类提醒器HelpPercl

我想使用线程发送通知。我已经创建了一个线程,它在无限时间内迭代。这是我的密码

    public static class ThreadStartUp
{
    public static void GetThread()
    {
        var thread = new Thread(ReminderHelperClas.IterateMethod);
        thread.Start();
    }

}
我的带有方法的静态类是

公共静态类提醒器HelpPerclas
{
公共静态无效检查提醒()
{
尝试
{
常量字符串usernamesendby=“38”;
const string message=“请向分配的任务提供反馈。”;
var chathub=新chathub();
使用(var db=new DatabaseContext())
{
var datetimenow=DateTime.Now;
const tasksassignstatus recordstatus=(tasksassignstatus)3;
var提醒模型=
db.ActionTaskVarainceCategories.Where(x=>x.TaskAssignStatus!=recordstatus)
.选择(x=>x)
.ToList();
foreach(提醒模型中的var项)
{
if(item.ToDate==datetimenow | | item.ToDateu.ID==item.AssignedToID)。选择(u=>u.username.FirstOrDefault();
var msgclass=new TaskMessagingModel{FromId=38,Message=Message,UserName=UserName,ToId=item.AssignedToID};
SaveMessages.TaskSaveMessage(msgclass);
Send(usernamesendby、message、username);
}
}
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
公共静态void IterateMethod()
{
尝试
{
while(true)
{
检查提醒();
睡眠(10000);
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
}

当消息被保存时,我调用了发送通知方法,但它给了我null异常,尽管我提供了所有参数。请帮我解决这个问题。

您不能只是初始化中心类并调用其方法。要获取要调用其方法的中心,应使用GlobalHost.ConnectionManager.GetHubContext()传入要获取其对象的中心类。比如说

private readonly IHubContext _chatHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
有关更多详细信息,我建议您阅读本教程

编辑
clientConnectionString是要向其发送消息的特定客户端的connectionId。因此,问题是您是否将消息发送给特定的客户机?如果要连接到特定的客户端,则必须在ChatHub中覆盖OnConnected()方法,并在内存或数据库中获取并持久保存connectionId,然后在CheckReminder方法中,您现在将访问connectionId并使用它向特定用户发送消息。你可以这样做

 public override Task OnConnected()
        {
            string connectionId = Context.ConnectionId;
            IPrincipal user = Context.User;

            //Save connection.
            _clientManager.AddToCorrectGroup(user, connectionId;

            return base.OnConnected();
        }

您不能只是初始化中心类并调用其方法。要获取要调用其方法的中心,应使用GlobalHost.ConnectionManager.GetHubContext()传入要获取其对象的中心类。比如说

private readonly IHubContext _chatHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
有关更多详细信息,我建议您阅读本教程

编辑
clientConnectionString是要向其发送消息的特定客户端的connectionId。因此,问题是您是否将消息发送给特定的客户机?如果要连接到特定的客户端,则必须在ChatHub中覆盖OnConnected()方法,并在内存或数据库中获取并持久保存connectionId,然后在CheckReminder方法中,您现在将访问connectionId并使用它向特定用户发送消息。你可以这样做

 public override Task OnConnected()
        {
            string connectionId = Context.ConnectionId;
            IPrincipal user = Context.User;

            //Save connection.
            _clientManager.AddToCorrectGroup(user, connectionId;

            return base.OnConnected();
        }

甚至不够近,哑巴。。我正在传递值,但仍然给我null exception甚至不够接近dud。。我正在传递值,但仍然给我null例外我没有得到clienConnectionString请帮我处理这个问题clientConnectionString是您要将消息发送到的特定客户端的连接ID。请检查我刚刚对答案所做的编辑非常感谢您的帮助它像charmi没有得到clienConnectionString一样工作请你能帮我吗clientConnectionString是你想发送消息的特定客户端的连接ID。检查我刚才对答案的编辑谢谢你的帮助它工作得很好