我的问题:主界面卡。
一触发这个事件 主界面就定住了, 请问根据 我的情况这个问题如何解决。 (请举例子,或简单代码)
private void ax_OnAttTransactionEx(object sender, Axzkemkeeper._IZKEMEvents_OnAttTransactionExEvent e)
{
//....
}
10 个解决方案
#1
多线程
#2
将ax_OnAttTransactionEx要执行的代码用一个子线程去实现,不然你的界面肯定会因为等待该方法执行完毕而假死。
#3
比较简单的用BackgroundThread控件:
以上代码来自下面的文章:
http://www.codeproject.com/Articles/28485/Beginners-Guide-to-Threading-in-NET-Part-5-of-n
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Threading.UI.Winforms
{
public partial class BackgroundWorkerBadExample : Form
{
public BackgroundWorkerBadExample()
{
InitializeComponent();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
for (int i = 0; i < (int)e.Argument; i++)
{
txtResults.Text += string.Format(
"processing {0}\r\n", i.ToString());
}
}
catch (InvalidOperationException oex)
{
MessageBox.Show(oex.Message);
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Completed background task");
}
private void btnGo_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(100);
}
}
}
以上代码来自下面的文章:
http://www.codeproject.com/Articles/28485/Beginners-Guide-to-Threading-in-NET-Part-5-of-n
#4
触发事件后,开启线程,在后面执行,完后通过委托或消息通知主进程
#5
典型的多线程问题
#6
用多线程
3楼不错
3楼不错
#7
+1
#8
多线程应该可以解决你的问题!
#9
用了这个方法,主界面还是会卡住2秒。
#10
int dwMachineNumber = 0;
int dwinfo = 2;
int dwvalues = 0;
Axzkemkeeper.AxCZKEM ax = (Axzkemkeeper.AxCZKEM)sender;
//这个方法需要2秒才能处理。这期间主界面会卡住
ax.GetDeviceInfo(dwMachineNumber, dwinfo, ref dwvalues);
可否提供一些简单的事例代码呢
#1
多线程
#2
将ax_OnAttTransactionEx要执行的代码用一个子线程去实现,不然你的界面肯定会因为等待该方法执行完毕而假死。
#3
比较简单的用BackgroundThread控件:
以上代码来自下面的文章:
http://www.codeproject.com/Articles/28485/Beginners-Guide-to-Threading-in-NET-Part-5-of-n
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Threading.UI.Winforms
{
public partial class BackgroundWorkerBadExample : Form
{
public BackgroundWorkerBadExample()
{
InitializeComponent();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
for (int i = 0; i < (int)e.Argument; i++)
{
txtResults.Text += string.Format(
"processing {0}\r\n", i.ToString());
}
}
catch (InvalidOperationException oex)
{
MessageBox.Show(oex.Message);
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Completed background task");
}
private void btnGo_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(100);
}
}
}
以上代码来自下面的文章:
http://www.codeproject.com/Articles/28485/Beginners-Guide-to-Threading-in-NET-Part-5-of-n
#4
触发事件后,开启线程,在后面执行,完后通过委托或消息通知主进程
#5
典型的多线程问题
#6
用多线程
3楼不错
3楼不错
#7
+1
#8
多线程应该可以解决你的问题!
#9
用了这个方法,主界面还是会卡住2秒。
#10
int dwMachineNumber = 0;
int dwinfo = 2;
int dwvalues = 0;
Axzkemkeeper.AxCZKEM ax = (Axzkemkeeper.AxCZKEM)sender;
//这个方法需要2秒才能处理。这期间主界面会卡住
ax.GetDeviceInfo(dwMachineNumber, dwinfo, ref dwvalues);
可否提供一些简单的事例代码呢