事件触发后,c#程序不会响应
我正在为一个程序开发一个用户界面,发生了一些非常奇怪的事情 我有一个文本视图,两个按钮和一个进度条。我将控制台上的输出重定向到文本视图。因此,我点击按钮,我应该收到输出消息。开始时还可以,但后来我使用了一些较长的例程,我尝试登录到web服务并使用web请求 我的代码几乎可以正常工作,我可以登录并使我的web请求正常工作。但是因为答案可能会变慢,我创建了一些输出消息,然后我的问题就开始了。。在我在事件处理程序端创建的所有代码运行之前,我的接口不会更新。当代码结束执行时,我一次收到所有的输出消息。程序运行时,我甚至不能移动窗口 我第一次在c上编程,我不得不使用它,因为我需要使用dll。。这种问题以前从未发生过。我通常使用Java。 好像代码没有按正确的顺序运行,对我来说没有意义。。因为我知道我的代码是正确的,因为它在控制台上运行,并且在程序没有响应时运行 我似乎无法理解这一点,我应该使用线程来处理事件吗事件触发后,c#程序不会响应,c#,mono,C#,Mono,我正在为一个程序开发一个用户界面,发生了一些非常奇怪的事情 我有一个文本视图,两个按钮和一个进度条。我将控制台上的输出重定向到文本视图。因此,我点击按钮,我应该收到输出消息。开始时还可以,但后来我使用了一些较长的例程,我尝试登录到web服务并使用web请求 我的代码几乎可以正常工作,我可以登录并使我的web请求正常工作。但是因为答案可能会变慢,我创建了一些输出消息,然后我的问题就开始了。。在我在事件处理程序端创建的所有代码运行之前,我的接口不会更新。当代码结束执行时,我一次收到所有的输出消息。程
class MainClass
{
public static void Main (string[] args)
{
Application.Init ();
UIMain win = new UIMain ();
win.ShowAll ();
Application.Run ();
}
}
public partial class UIMain : Gtk.Window
{
public UIMain () :
base (Gtk.WindowType.Toplevel)
{
System.Windows.Forms.Application.EnableVisualStyles ();
this.Build ();
Console.SetOut (new ControlWritter(this.textview1));
}
protected void OnButton2Clicked (object sender, EventArgs e)
{
if (entry1.Text.Equals(String.Empty) || entry2.Text.Equals(String.Empty)) {
Console.WriteLine("random output");
}
ConstantesSetup.autoSetup ();
button1.Sensitive = true;
if (!ConstantesSetup.var1) {
ConstantesSetup.routine6 ();
ConstantesSetup.routine5 ();
ConstantesSetup.routine4 ();
ConstantesSetup.routine3 ();
ConstantesSetup.routine2 ();
ConstantesSetup.var1 = true;
}
}
protected void OnButton1Clicked (object sender, EventArgs e)
{
switch (ConstantesSetup.erp) {
case "ERP":
eti_scp.autoSync (this);
break;
}
}
}
我很抱歉没有代码,但我甚至不知道我们是否要开始寻找问题
谢谢你抽出时间;) 您正在使用长时间运行的同步操作阻塞UI线程。您需要异步运行这些长时间运行的操作,以便在后台运行任务时,按钮单击事件处理程序可以立即返回 异步运行任务有几个选项,但一个简单的选项是使用
BackgroundWorker
。在事件处理程序中,您可以执行以下操作:
var worker = new BackgroundWorker();
worker.DoWork += (o, args) =>
{
//call long running processes here
};
worker.RunWorkerAsync();
BackgroundWorker还将为您将这些操作分派到UI线程上,以便您可以更新
DoWork
回调方法中表单中的控件。谢谢您解决了这个问题,我没有使用这个示例,但它给了我提示