Tag: 事件处理

XNA游戏不会在“拖动”窗口,任何事件处理程序时更新?

我是XNA和C#的新手,我已经到了我的XNA项目,我需要事件处理程序来预测游戏何时失去焦点,以便我可以在再次获得焦点后同步音乐和视觉效果。 但是我遇到了一个问题; 被拖动时游戏不会“更新”,但我似乎无法为此找到合适的事件监听器。 我试过了: System.Windows.Forms.Control.FromHandle(Window.Handle).Move += new EventHandler(DeactivateGame); 移动窗口时,这个叫做“DeactivateGame”很多次。 但即使它工作,尽管它不止一次调用该函数,我看不到一个事件处理程序,当窗口句柄被释放时调用一个函数,以便通过调用“ActivateGame”再次恢复游戏 旁注(如果有帮助的话); this.Activated += new EventHandler(NotifyActivated); this.Deactivated += new EventHandler(NotifyDeactivated); 这些事件处理程序在最小化窗口或将焦点放在除游戏窗口之外的其他内容时工作正常,但它不会注册被拖动的窗口。 对于习惯编程的人来说可能很明显,但我只是想确保我已经提供了足够的信息 编辑:我想要添加的事件作为事件处理程序的结果是一个DateTime / TimeSpan,当窗口失焦或拖动时调用它。 当丢弃或再次聚焦时,这将比较当前时间与窗口失去焦点时设置的时间,以计算两者之间的丢失时间。

请问处理程序我的事件立即返回是否可以?

我正在写一个.NET库。 其中一个类具有库的用户需要订阅的事件。 可以问这些事件的处理程序实现快速返回吗? 或者这是一个常见的问题,有一个共同的解决方案? (如果处理程序需要很长时间也不会致命 – 但是如果他们的处理程序需要的时间超过半秒,事情就会开始出错 – 这是一个网络库,并且连接的对等体会认为这个对等体已经丢失了发送回复的主题) 例如 public delegate void Ping(); class A { /// /// If your handler doesn’t return quickly… I am going to cry. /// public event Ping Ping; private void RaisePing() { var handler = Ping; if(handler != null) handler(); } // this is called several times a […]

基本的GUI事件处理问题C#

下午好, 我有一些关于GUI事件处理的基本问题。 首先使用C#,我们如何将事件链接到对象 – 我猜测事件处理程序? 如果是这样,每个处理程序可以使用单独 – 事件处理程序如何定位必须操作的对象? 我对JAVA的工作原理有一个大概的了解。 指向我的参考将是好的 – 我已经搜索谷歌的答案无济于事。 非常感谢,J

如何异步处理消息,在处理时丢弃任何新消息?

我有一个C#应用程序订阅我们的消息传递系统上的主题以进行价值更新。 当一个新值出现时,我会进行一些处理,然后继续。 问题是,更新可以比应用程序处理它们更快。 我想要做的就是坚持最新的价值,所以我不想要一个队列。 例如,源发布值“1”,我的应用程序接收它; 在处理时,源在我的应用程序完成处理之前发布序列(2,3,4,5); 我的应用程序然后处理值“5”,抛弃先前的值。 由于它是基于专有的消息传递库,所以很难发布一个有效的代码示例,但我认为这是一个常见的模式,我只是无法弄清楚它的名称是什么……似乎处理函数必须运行在一个单独的线程上,而不是消息回调,但我不知道如何组织它,例如如何通知该线程的值更改。 关于我需要做什么的一般提示?

如何在C#中删除并重新连接EventHandler到控件?

我读过这个答案 。 它只是告诉我如何从按钮控件中删除click事件。 我想知道如何更改代码(特别是GetField(“EventClick”…部分!),所以我可以用其他控件做同样的事情。例如,我想删除TextBox的TextChanged事件。而我还想知道如何重新附加事件处理程序。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text.Length < 10) return; MessageBox.Show("do something"); } private void Form1_Load(object sender, EventArgs e) { Tools.mkTextBoxWithPlaceholder(textBox1, "hi, input here…"); } } class Tools { public static void mkTextBoxWithPlaceholder(TextBox tb, string placeholder) { […]

如何在WPF ListBox中排序?

C#4.0 WPF应用程序,请参阅下面的代码,在启动时显示: <img src="http://sofzh.miximages.com/c%23/HK28Y.jpg" alt=" ListBox 的初始顺序”> 使用btnSort_Click()单击事件处理程序单击排序按钮后的abd: 我如何按顺序排序aaa,bbb,ccc? C#代码: public MainWindow() { InitializeComponent(); listBox1.Items.Add(“ccc”); listBox1.Items.Add(“aaa”); listBox1.Items.Add(“bbb”); } private void btnSort_Click(object sender, RoutedEventArgs e) { listBox1.Items.SortDescriptions.Add( new System.ComponentModel.SortDescription(“Content”, System.ComponentModel.ListSortDirection.Ascending)); } private void listBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) { listBox1.Items.RemoveAt (listBox1.Items.IndexOf(listBox1.SelectedItem)); } XAML: 更新: 好吧,我只是按照文章“排序WPF ListBox项目” 那么,我按照属性“内容”排序的顺序是什么,以及该属性“内容”在哪里,我想知道(试图将其改为任意“fff”而不是“内容”已经变得相同,如第二个截图,结果?

WinRT事件如何与.NET互操作

在Rx团队Bart De Smet的最新video中:Rx Update – .NET 4.5,Async,WinRT我看到一些非常奇怪的元数据暴露给.NET的WinRT事件,更多的是prenexly – add_ / remove_ pair方法签名: EventRegistrationToken add_MyEvent(EventHandler handler) { … } void remove_MyEvent(EventRegistrationToken registrationToken) { … } 它看起来非常棒,允许通过“处理”注册令牌取消订阅事件(Rx做同样的事情,从Subscribe()方法返回IDisposable实例)。 因此,可以轻松取消订阅事件中的lamba表达式,但…… 那么C#如何允许处理这类事件呢? 在.NET中,可以使用委托上的一个实例订阅方法(静态和实例),并使用指向同一方法的完全另一个委托实例取消订阅。 因此,如果我使用WinRT事件并且只是在C#中取消订阅某个委托类型实例…编译器在哪里获得正确的EventRegistrationToken ? 所有这些魔法如何运作? – 更新 – 实际上EventRegistrationToken不允许简单地通过调用某种Dispose()方法取消订阅,这真的很遗憾: public struct EventRegistrationToken { internal ulong Value { get; } internal EventRegistrationToken(ulong value) public static bool operator ==(EventRegistrationToken left, EventRegistrationToken […]

RoutedEventHandler和EventHandler之间的区别

有什么区别 this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 和 childWindow.MyEvent += new EventHandler(childWindow_MyEvent);

在Windows中处理系统文件夹事件

我正在编写一些C#代码,我需要检测应用程序运行时是否已打开Windows文件系统上的特定文件夹。 有什么办法吗? WinAPI可能吗?

我是否必须取消订阅本地变量的匿名事件处理程序?

如果我有一个看起来像这样的代码: public void Foo() { Bar bar = new Bar(); bar.SomeEvent += (sender, e) => { //Do something here }; bar.DoSomeOtherThingAndRaiseSomeEvent(); } 当方法用完范围时会收集bar ,还是我必须手动取消订阅事件以防止由于引用SomeEvent而导致内存泄漏?