多进程的编程的问题 我现在在一个程序中调用的一个dll,一次只能被一个线程调用,如何实现可以并发调用该dll,windows环境下,用多进程编程吗?多进程的资源比较少,谁有一个例子能参考一下啊?采用多线程编程,但是还是不能被并发调用。希望各位大神们提宝贵意见!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 每个线程调用dll时,dll都会在该线程内映射一份自己,所以无所谓一次几个线程去调用的问题 没有办法,那是你的dll开发时选择的线程模式的问题,如果多线程调用它就会使得它崩溃。唯一的办法就是删除它,你使用.net重新写,或者让作者重新写。 楼主 给你一个多线程编程的例子 第一个是按钮事件private void btnDataUp_Click(object sender, RoutedEventArgs e){ Thread thread = new Thread(GetDataUp); //创建一个线程 其中GetDataUp是该线程要执行的方法 thread.Start(); //该线程运行 无论上述线程是否执行完毕都继续执行一下代码 lblUpdateMessage.Visibility = Visibility.Visible;}private void GetDataUp() { //执行的代码 Action action; //封装一个方法 该方法不具备参数并且不返回值 action = () => { //执行的代码 }; btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, action); //关联的线程上异步执行委托 执行Action方法 } 给你个多线程的例子private void btnDataUp_Click(object sender, RoutedEventArgs e){ Thread thread = new Thread(GetDataUp); //创建一个线程 其中GetDataUp是该线程要执行的方法 thread.Start(); txb.Text="我先看到效果"; //文本框}private void GetDataUp() { //执行的代码 Action action; //封装一个方法 该方法不具备参数并且不返回值 action = () => { Thread.Sleep(5000); MessageBox.Show("我第二显示出来"); }; btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, action); //关联的线程上异步执行委托 执行Action方法 } 用我上面的代码 自己建一个按钮和文本框就知道了(注意控件的命名) 我只是给个多线程编程的例子 至于你说调用dll 我还真没常识过 我也刚看明白,Lz说的不是每个进程load dll只有一个实例的问题,而是dll函数中做了线程访问数量控制如果不是进程级的锁,到可以用多进程实现例如 ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = @"D:\test.exe"; Process.Start(psi);如果是只能重写了 省事的办法(下下策),多复制几个DLL,dll1,dll2等,弄个全局变量计数。不知道是否可行, 多进程可以解决.任务A 可以用多线程解决 同时也可以用多进程解决.比如写一个控制程序 来控制 工作程序1,工作程序2,工作程序3 ;程序间通信模式采取 回环地址socket这样工作程序1,2,3... 每个各自使用单线程启动自己的DLL.这不就搞定了么. 你有搞多进程再封装这个dll的闲工夫还不如重写一个... 第一个网页的cookie 如何将用户的各种信息以链表的方式存储并写入text文件中,C# C#播放器问题 关于TextBox的问题 [急]嵌入到IE中的winForm为什么不能浏览 什么工具可以方便的把10进制转换为16进制 菜鸟求答案 "通常每个套接字只允许使用一次"出现这个错误怎么办? Visual C# 2005 Express中没有连接到SQLSERVER选项 我想写个类似花生壳的软件。 哪有这种树类ListView控件控制? DotNetBar 9.5以上版本是否支持4.0以下的.net框架?
{
Thread thread = new Thread(GetDataUp); //创建一个线程 其中GetDataUp是该线程要执行的方法
thread.Start(); //该线程运行 无论上述线程是否执行完毕都继续执行一下代码
lblUpdateMessage.Visibility = Visibility.Visible;
}
private void GetDataUp()
{
//执行的代码
Action action; //封装一个方法 该方法不具备参数并且不返回值 action = () =>
{
//执行的代码
};
btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, action); //关联的线程上异步执行委托 执行Action方法
}
{
Thread thread = new Thread(GetDataUp); //创建一个线程 其中GetDataUp是该线程要执行的方法
thread.Start();
txb.Text="我先看到效果"; //文本框
}
private void GetDataUp()
{
//执行的代码
Action action; //封装一个方法 该方法不具备参数并且不返回值 action = () =>
{
Thread.Sleep(5000);
MessageBox.Show("我第二显示出来"); };
btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, action); //关联的线程上异步执行委托 执行Action方法
}
如果不是进程级的锁,到可以用多进程实现
例如
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"D:\test.exe";
Process.Start(psi);
如果是只能重写了
程序间通信模式采取 回环地址socket这样工作程序1,2,3... 每个各自使用单线程启动自己的DLL.
这不就搞定了么.