用C#语言获取IRC服务器中某一频道的用户列表
我在Win7中使用VS 2010. 我想通过编程使用IRC,在 中使用irc客户端库 连接到IRC服务器 检测IRC服务器中的频道是否存在 获取IRC服务器中给定频道的用户列表. 在给定频道中向用户发送消息,并从用户接收消息(Mantenain对话) 对此有任何建议吗?完整的源代码样本? 解决方案 尝试使用此C#IRC库: 它有很多方法,我敢肯定您可以与它们实现所有想要的一切:
8 2024-04-26
编程技术问答社区
ISupportIncrementalLoading集合-当LoadingMoreItems正在进行时通知UI
我已经在我的应用中创建了一个IncrementalLoadingCollection类,该类实现了ISupportIncrementalLoading,并从ObservableCollection中继承. 它可以正常工作并且已加载项目,但我想在应用程序的Status Bar上显示一条消息,即正在进行一些工作. 实现这一目标的好方法是什么? 由于LoadMoreItemsAsync在滚动列表时在内部调用,因此我无法访问该部分以提出更新Status Bar的代码.现在,我在LoadMoreItemsAsync中这样做,我发现这是一种可怕的方法,但是到目前为止,我找不到更好的方法... 任何建议都高度赞赏. 解决方案 您可以:例如:从ObservableCollection继承并实现ISupportIncrementalLoading这样: class IncrementalLoadingObservableCollection : Obs
16 2024-04-25
编程技术问答社区
C# 冒泡/传递一个事件
我如何通过课程之间的活动? 我知道这听起来很荒谬(这很荒谬),但是我过去很快就对此感到困惑.搜索没有出现类似的问题,所以我认为我会提出它. 这是涉及的对象: WinForm -> Speaker -> Tweeter -> Woofer [扬声器,高音扬声器,Woofer]都声明了一个" speaktome"事件,该事件发送了一个简单的字符串消息.这些事件是使用标准模式声明的: public delegate void SpeakToMeHandler(object sender, SpeakToMeEventArgs e); public event SpeakToMeHandler SpeakToMe; protected virtual void OnSpeakToMe(string message) { if (SpeakToMe != null) SpeakToMe(this, new SpeakToMeE
6 2024-04-21
编程技术问答社区
Azure消息队列中的消息将直接进入毒药消息队列
[希望这可以节省某个时间.] 下面的代码在搬到较新的 QueueClient class(在azure.storage.queues中)来自不推荐的QueueClient queue = new QueueClient(accountConnectionString, "myQueuename"); queue.Create(); queue.SendMessage(msg); 消息被移至相关的毒药消息队列中,我在Azure的应用Insideights中看不到任何错误消息. 当我在毒药探索器中手动将消息从毒药的消息队列回到队列中时,它起作用! 解决方案 CloudQueue 类默认为使用 base64 在先前的V11库中编码,而 QueueClient 不! 要设置 base64 编码,添加a QueueClientOptions : QueueClientOptions queueOptions = new() { MessageEncoding
12 2024-04-20
编程技术问答社区
调整控制台的大小事件
所以我认为窗口大小的事件将通过winproc出现,我可能会误会,希望收到控制台大小的通知. 我想在调整大小时最大化控制台缓冲区,并且一旦完成后,它基本上将其缩小到窗口大小,从而防止了由于缓冲区小于窗口而导致的溢出误差. 解决方案 不幸的是,答案是您无法连接控制台的wndproc,因为在一个单独的安全控制过程中/a>.间谍++可以将其他过程的wndprocs挂钩以读取窗口消息,而间谍++甚至无法读取控制台窗口消息.即使您可以解决安全问题,C#也不能用于连接其他过程. 我在调整大小方面的比赛条件完全相同.在Windows 10上,情况更糟,因为调整窗口的大小会反弹文本并更改缓冲区宽度以及窗口宽度. Console.BufferWidth,Console.BufferHeight和家人是非原子的,如果您在调整窗口时使用这些错误,则会丢弃托管和不受管理的错误. 您肯定可以在事实之后找到 读取输入缓冲区事件,但这无法解决您的问题.您仍然存在并发问题.由于这不是钩子,因此您
8 2024-04-19
编程技术问答社区
调整控制台的大小事件
所以我认为窗口大小的事件将通过winproc出现,我可能会误会,希望收到控制台大小的通知. 我想在调整大小时最大化控制台缓冲区,并且一旦完成后,它基本上将其缩小到窗口大小,从而防止了由于缓冲区小于窗口而导致的溢出误差. 解决方案 不幸的是,答案是您无法连接控制台的wndproc,因为在一个单独的安全控制过程中/a>.间谍++可以将其他过程的wndprocs挂钩以读取窗口消息,而间谍++甚至无法读取控制台窗口消息.即使您可以解决安全问题,C#也不能用于连接其他过程. 我在调整大小方面的比赛条件完全相同.在Windows 10上,情况更糟,因为调整窗口的大小会反弹文本并更改缓冲区宽度以及窗口宽度. Console.BufferWidth,Console.BufferHeight和家人是非原子的,如果您在调整窗口时使用这些错误,则会丢弃托管和不受管理的错误. 您肯定可以在事实之后找到 读取输入缓冲区事件,但这无法解决您的问题.您仍然存在并发问题.由于这不是钩子,因此您
12 2024-04-19
编程技术问答社区
在C#中实现一个消息/订阅机制
我正在典型地使用MVVM模式的WPF应用程序.回答这个问题我已经设置了一个ModelProviderService作为属性的模型.服务的消费者是ViewModels,即他们从服务中汲取模型,而不是自己实例化. class ModelProviderService { private LoginModel loginModel; public LoginModel LoginModel { get { return loginModel; } set { loginModel = value; } } private ProjectsModel projectsModel; public ProjectsModel ProjectsModel { get { return projectsModel; } set { projectsModel = value; } } public ModelProviderServ
6 2024-04-19
编程技术问答社区
有谁知道 ShellHook 消息 HSHELL_RUDEAPPACTIVATED 是什么意思?
我正在编写应用程序,该应用程序建立了壳挂钩以获取外壳事件(如果很重要的话,我正在使用C#). 我正在使用此示例:/blog/cns!Dafd19bc5d669d8f!132.Entry Hook工作正常,但我没有收到我感兴趣的消息:HSHELL_WINDOWACTIDINED(所有其他与窗口相关的事件都效果很好). 取而代之的是,我收到的消息32772应该是hshell_rudeaplactiviation的(一些谷歌搜索帮助). 但我不明白为什么我根本没有收到HSHELL_WINDOWATICATICATICTIATIAL,以及此hshell_rudeappactiviationed消息的含义. MSDN没有提及它. 有人可以向我解释吗? 解决方案 HSHELL_RUDEAPPACTIVATED IS 32772,仅HSHELL_WINDOWACTIVATED HSHELL_WINDOWACTIVATED.从我几乎无法在各种网站上收集的内容,当全屏应用激活时,Win
6 2024-04-18
编程技术问答社区
c#. MSMQ .单个消息的最大尺寸
使用 msmq 我想发送一条消息( 接近1 GB ).我想发送字节的数组.但是我只能发送 4 MB . 我如何解决这个限制? 解决方案 您知道,MSMQ中消息的最大大小为4MB,最好选择其他解决方案. 解决方案: 如果要传输超过此尺寸的数据,则必须将其剪切 进入发件人侧的块,然后在接收器侧重组. 为什么MSMQ消息有4MB限制? 查看这个博客. 如何使用Microsoft消息Queuing 发送大于4 MB的文件? 在这里 其他解决方案 您是否必须坚持使用纯MSMQ?如果您可以考虑切换到 nservicebus ,它具有称为 databus 可以有效地将大的有效载荷放在MSMQ之外,但将有效载荷与MSMQ消息联系起来. (根据我的经验,它也使使用MSMQ与C#更愉快.但是YMMV) 如果您不能使用nservicebus,则至少可以受到它的启发.生成一个随机文件名,将内容存储在两个端点都可以访问的共享上,在您的消息中包含文件名.
6 2024-04-18
编程技术问答社区
发送或发布信息到一个Windows窗体的信息循环中
我有一个线程,该线程读取来自命名管道的消息.这是一个阻止读数,这就是为什么它自己的线程.当此线程读取一条消息时,我希望它通知在主线程中运行的Windows表单消息循环已准备就绪.我怎样才能做到这一点?在win32中,我会做一个术后,但是该功能似乎不存在.NET中(或者至少我找不到它). 解决方案 在Winforms中,您可以使用 control.begininvoke .一个例子: public class SomethingReadyNotifier { private readonly Control synchronizer = new Control(); /// /// Event raised when something is ready. The event is always raised in the /// message loop of the thread where this object was c
8 2024-04-18
编程技术问答社区
如何将信息从一个子用户控件传递给父用户控件
这是Windows表单/.NET C#问题. 我有一个无边界的窗户,其透明度键和背景颜色使其完全透明.窗口内有几个用户控件. 我希望能够移动窗口.我知道如何在父窗口上执行此操作,但是我的问题是孩子控制是唯一可见的东西,因此唯一可单击的事情. 问题是:如何将某些消息传递给父母,以便当右鼠标按钮向下并且鼠标在任何一个子控制器上移动时,父母可以移动? 或者也许您可以另一种建议? 感谢您的帮助. 马克 解决方案 即使不使用System.Windows.Forms.Message类的sendmessage,也可以实现目标.如果您已经拖动了,我想您熟悉WM_NCLBUTTONDOWN消息.将其从控制的Mousedown事件中发送给您的父母. 这是移动表单单击控制标签的示例.注意使用发送者从单击控件中释放捕获的第一行.这样,您可以将此处理程序设置为旨在移动表格的所有控件. 这是移动表单的完整代码.不需要其他. public const i
6 2024-04-16
编程技术问答社区
向线程发送消息的最佳方式
将消息发送到线程的最有效和最快的方法是在c#/.net中运行的线程(不是处理): 使用同步队列(例如 在C# 中阻止队列和线程的通信) 使用application.在线程上下文中和运行应用程序之前的系统winforms运行一个消息循环.lun订阅在线程上下文中捕获杂物的事件. 使用套接字或命名管发送线程. 在Linux中,我被用来使用Unix域插座来执行此操作,在Windows中进行的等效方法是什么?共享内存文件?命名管? 你怎么看? 解决方案 我会亲自使用生产者/消费者队列.这实际上就是Winforms消息循环的内容,只是以特定于Windows表格的方式. 请注意,如果您能够使用.NET 4.0,则有 collections 内置的框架非常简单.特别是,使用 BlockingCollection a ConcurrentQueue 将做您想要的事情. 我不会亲自使用geekscafe代码 - 我将生产者/消费者的本质封装在其自己的
10 2024-04-14
编程技术问答社区
WCF错误。该工厂启用了手动寻址功能,因此所有发送的消息都必须预先寻址。
我为我创建了一个自定义工厂的托管WCF服务,因此可以与多个主机标头一起使用: /// /// Required for hosting where multiple host headers are present /// public class MultipleHostServiceFactory : ServiceHostFactory { protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { List addresses = new List(); addresses.Add(baseAddresses[0]); return base.CreateServiceHost(serviceType, addresses.ToAr
6 2024-04-13
编程技术问答社区
从.msg文件中读取
我需要从.net 中的Outlook .msg文件中读取不使用COM API进行Outlook(COS它将不会安装在我的应用程序将运行的机器上).有没有免费的第三方图书馆可以做到这一点?我想从CC和BCC字段中提取.如果也存储在MSG文件中,已发送/接收日期字段将很好. 解决方案 更新:我找到了一个第三方com库,称为 目前对我来说很好.如果您通过.NET中的com-Interop使用它,请不要忘记在完成后释放每个com对象,否则您的应用程序会随机崩溃. 其他解决方案 在没有COM的情况下,在CodeProject上可用的代码可用.参见在这里.. 其他解决方案 这里是一些示例VBA代码,使用 Outlook rexemption 找到HuseyInt. Public Sub ProcessMail() Dim Sess As RDOSession Dim myMsg As RDOMail Dim myString As String
8 2024-04-11
编程技术问答社区
发送/接收信息 给/来自两个正在运行的应用程序
我有两个称为 sender 和接收者的应用程序. 接收器将由发件人使用System.Diagnostics.Process.Start方法 启动 接收器将在隐藏模式下启动,因此它没有MainWindowHandle. 然后,我们可以在向接收方发送消息时使用Win32.WM_COPYDATA,但它需要MainWindowHandle,所以我们不能. 我需要的是能够通过任何方法定期发送和接收消息. 我检查了有关MainWindowHandle的手册的以下链接,但没有帮助: 将消息发送到Windows Process(不是其主窗口) 一个解决方案可能是System.Diagnostics.Process的对象,它可能有助于我们将消息发送到一个过程. 解决方案 有不同的方法在两个过程之间共享信息. 首先,您必须考虑一下当应用程序扩展时两个过程是否总是在同一台计算机中. 不同的机器 使用TCP/UDP套接字连接(可以是最快的解决方案
6 2024-04-11
编程技术问答社区
以编程方式在另一个窗口点击鼠标
是否可以通过编程单击另一个窗口中的位置而不将鼠标移至该位置,即使窗口不在顶部?我想将一种消息发送到另一个窗口,以模拟鼠标单击位置. 我试图通过邮记点来完成此操作: PostMessage(WindowHandle, 0x201, IntPtr.Zero, CreateLParam(300,300)); PostMessage(WindowHandle, 0x202, IntPtr.Zero, CreateLParam(300,300)); 我以这种方式制作了CreatelParam功能: private static IntPtr CreateLParam(int LoWord, int HiWord) { return (IntPtr)((HiWord
12 2024-04-10
编程技术问答社区
在Windows中是否有一种机制像Linux中的消息队列那样工作?
最近,我找到了一份工作(C/C ++),可以使用Windows中不同线程之间的消息通信.我谷歌搜索,发现窗口也有一个消息队列,但是它与窗口更相关,实际上,我的应用程序中不需要任何窗口. 喜欢Linux中的消息队列,每个线程创建一个消息队列并获得了消息队列ID,将消息发送到该ID,从该ID接收等等,这是我需要的消息队列. Windows中是否有类似的机制? 解决方案 您不需要窗口即可在Windows上使用消息,任何调用PeekMessage或GetMessage的线程都会获取消息队列,并且可以使用消息在相同的过程中应正常工作,但是如果这是跨程序,并且您需要发送超过size_t*2*2,则应查看其他 ipc机制或使用共享内存和某种类型的锁定构建自己的. Windows还具有 msmq .. 您没有指定是否需要确切的POSIX接口,无论哪种方式,Wikipedia都具有 list lem 开源替代方案...
8 2024-04-07
编程技术问答社区
我怎样才能将字节分块传输给客户?
SignalR当我将字节的块从客户端通过服务器转移到客户端(或client到服务器;或服务器到客户端)时,会丢失许多消息. 我将文件读取到流中,并通过集线器或持续连接发送给其他客户端.这很快运行,但是总有消息掉落或丢失. 如何在不丢失消息的情况下将大文件(或不在块中)转移到客户端? 解决方案 正如@dfowler指出的那样,这不是工作的正确技术.我建议这样做的是发送一条消息,该消息要下载包含链接的文件,然后您可以使用标准获取请求使用静态文件或使用ASP.NET WebAPI编写的某些Web服务下载该文件. 其他解决方案 Signalr不用于文件传输,它用于发送消息. 其他解决方案 为什么这是不正确的技术?如果客户端需要向SignalR Hub发送一些数据,则应该能够通过SignalR连接而无需其他内容. 实际上,在发送字节数组时,它的工作正常,至少对我来说,但是在转移块时我也遇到了类似的问题. 也许您可以进行一些测试以检查发送块的订单是否与
12 2024-04-05
编程技术问答社区
从Handler.getMessage()中获取什么参数。
我正在使用线程来执行一些BT任务.我正在尝试将消息发送到UI线程,以便可以根据BT线程进行UI工作.为此,我正在使用处理程序,但我不知道如何检索发送给处理程序的数据. 发送我使用的数据: handler.obtainMessage(intCode).sendToTarget(); 其中intcode是int.我的处理程序看起来像这样. Handler handler = new Handler(){ @Override public void handleMessage(Message msg){ Bundle data = msg.getData(); int code = data.getInt("what"); Log.d(LOG_TAG, "Msg: "+code); } } 但是代码的值绝不是其他.该值未存储在捆绑包中,带有"什么"? 解决方案 您可以以这种格式设置数据
12 2024-04-05
编程技术问答社区