axAcroPDF1不包含LoadFile的定义

如题

窗体控件选择项都引用了。两个FLIB也引用了
就在this.axAcroPDF1.LoadFile() LoadFile红线,未定义

3个回答

请问,这个问题你解决了吗?

你好,我也遇到了相同的问题

找到解决方法了,添加下面那两个,你试试
AxAcroPDF1.CreateControl()
this AxtiveX BeginInit().
https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/1a6514c3-3553-44eb-ae8c-30a1288e0ff4/axacropdf-doesent-work-when-using-mdi?forum=vbgeneral

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# axAcroPDF控件播放PDF文件问题
打开本地文件没问题,可以直接浏览,但是打开局域网共享pdf文件时,就无法显示,等了一会儿,以为是加载慢的问题,但是还是无法显示 private void PDFView_Load(object sender, EventArgs e) { string fileName = MyOpenFileDialog(); axAcroPDF3.LoadFile(fileName); //axAcroPDF3.LoadFile("C:\\Users\\Darcy\\Desktop\\Android+Development.pdf"); } string MyOpenFileDialog() { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "PDF文档(*.pdf)|*.pdf"; if (ofd.ShowDialog() == DialogResult.OK) { return ofd.FileName; } else { return null; } }
.net 反射使用(从其他项目复制过来的dll不能使用反射?(不添加引用))
刚刚学习使用反射,请教个几个问题, # **1.**如果一个项目一个dll 引用了其他的dll,我只拷贝过来它能使用吗? ,我拷贝过来后就是报错An unhandled exception occurred while processing the request. # # FileNotFoundException: Could not load file or assembly 'System.Web.Mvc, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. 系统找不到指定的文件。 # Unknown location # # # **2.**LoanFrom后好像使用的是上一个dll,不是最新的dll,有什么办法能够让它每次都使用最新的dll进行反射, 3.最后一个问题就是使用为啥一个dll用LoadFrom可以使用GetTypes(),但是使用LoadFile就不可以了
Apache LoadFile添加配置文件服务器无法启动问题
在Apache的httpd.conf配置文件后添加LoadFile ".../pthreadVC2.dll"后服务器无法启动?
在Timer_Tick事件中循环播放PDF文件10天死掉
如题,用的是AxAcroPDF.LoadFile(), 隔10天左右进程就会死掉。死机时都会弹出如图对话框。![进程死掉时的对话框](https://img-ask.csdn.net/upload/201706/30/1498786644_841215.jpg)
mysql是如何进行loadfile的?
小妹对mysql涉猎不多,在版内也没找到相关答案,所以就求教于各位大侠。 问题起因:我自己用jdbc测试,用insert value的方式,插入40w条数据,测试了InnoDB,MyISAM引擎和预处理及批处理几种方式,最后得出结论是InnoDB引擎下预处理且批处理性能最好,但是也要37s左右。(是本地数据库)其它方式一般也就在50s不到的样子,最慢的就是100多s(MyISAM非预处理单条插入)。 后来,用了LOAD DATA LOCAL INFILE的方式,同样的数据,用了不到2s,我想问一下,mysql究竟是如何实现load file的,都是插入数据,为什么效率会提高那么多? ps:我知道可以去看源码,不过太多了有点头大,希望哪位高手能简要的说明性能提高的原理,或者告诉我源码哪个文件里能够找到相关原理。唉最近项目要用,没有办法,提前谢谢了!分只能给这么多了!
ajax获取数据更新table以后,jquery.datatable的js效果失效了该怎么办呀QAQ?
用了jquery的模板表格,如果table里面放的是静态数据的话,选择展示多少条数据、搜索表格内容的功能都是正常的。 但用ajax从后台获取实际上的数据,append到tbody里面这样的形式后,就发现上面这些功能都失效了。 菜鸡学艺不精,网上的方法都试过了,都不行。 感觉好像是同步异步的问题,但不知道该怎么解决,求大佬指路QAQ。 这个是html: ``` <div class="table-responsive"> <table id="dataTable1" width="100%" class="table table-striped table-lightfont" style="font-size: 15pt"> <thead > <!-- 第二版结果展示 --> <tr> <!-- <th>ID</th> --> <th>站名</th> <th>设备名称</th> <th>电压等级</th> <th>采样时间</th> <th>相位</th> <th>最大过电压(kV)</th> </tr> <!-- ID,站名,设备名称,电压等级,采样时间,相位,最大电压值 --> </thead> <tfoot> <!-- 第二版结果展示 --> <tr> <!-- <th>ID</th> --> <th>站名</th> </th>设备名称</th> <th>电压等级</th> <th>采样时间</th> <th>相位</th> <th>最大过电压(kV)</th> </tr> </tfoot> <tbody id="searchBody"> </tbody> </table> </div> ``` 这个是js: ``` function search() { //alert($("#station").val()) var station = $("#station").val() var start_time = $("#start_time").val() //alert(start_time.toUpperCase) var end_time = $("#end_time").val() var start_hour = $("#start_hour").val() alert(start_time.toUpperCase) var end_hour = $("#end_hour").val() var level = $("#selectLevel").val() var flag = false; //标识,表示页面上数据还未处理完成 $.ajax({ type : "get", url : "observe/search", data : $("#searchForm").serialize(), success : function(data) { /*table = $('#dataTable1').DataTable( { retrieve: true, destroy:true, paging: false } );*/ //alert("sucess!") //var length=getJsonLength(data); console.log(data) var arrData = eval(data); //alert(data[0].sampdate) var searchBody = $("#searchBody"); $("#searchBody").html(""); //var dataTable1 = $("dataTable1"); //$("#dataTable1").html(""); //var bodyInfo=""; //var tableInfo=""; if (data) { for (var i = 0; i < arrData.length; i++) { //ID,站名,设备名称,电压等级,采样时间,相位,最大电压值 var row = “【不重要,略过】"; searchBody.append(row); //bodyInfo+=row; } flag=true; } else { alert("数据库故障或无数据!"); } } }); var loadFile; loadFile = setInterval(function() {//定时检测 if(flag) {//如果数据已经处理完毕 //loadAlljscssFile(); loadjscssfile('static/js/jquery-3.2.1.min.js', "js"); //加载你的js文件 loadjscssfile('static/bootstrap-3.3.7/css/bootstrap.min.css', "css"); //加载你的css文件 loadjscssfile('static/bootstrap-3.3.7/js/bootstrap.min.js', "js"); //加载你的js文件 loadjscssfile('bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css', "css"); //加载你的js文件 loadjscssfile('bower_components/datatables.net/js/jquery.dataTables.min.js', "js"); //加载你的js文件 clearTimeout();//取消定时检测节省开销 } },50); } ```
新人写的关于一个比对文件差异的代码
public class Compare { LinkedList list1 = new LinkedList();//用来存放文件夹的绝对路径 LinkedList list2 = new LinkedList();//用来存放文件的绝对路径 public void files(String filename) throws IOException { //定义一个files方法,这个方法用来把对应路径下的文件夹遍历 File file = new File("filename"); File[] file1 = file.listFiles();//存放的是一级目录下的文件以及文件夹 for(int i = 0;i < file1.length;i++) { if (file1[i].isDirectory()) list1.add(file1[i]);//如果是文件夹就加到list1中 else list2.add(file1[i]); //如果是文件的话,就加到list2中, } File tmp; while(!list1.isEmpty()){ //判断list1是否为空,如果为空的话,表示所给的文件路径下只有一个文件 tmp =(File) list1.removeFirst(); // 把存放一级目录下的第一个文件的路径给tmp if(tmp.isDirectory()) //判断这个路径是不是一个文件 { file1 = tmp.listFiles(); //如果是一个文件的话,把这个文件下的(第三级目录)中的文件和文件夹的路径给file1数组 if(file1 == null) //如果这个数组为空,即这个文件夹下是空的,那么结束本次循环,然后继续找到链表的第二个(现为第一个) continue; for(int i = 0;i < file1.length;i++) { if(file1[i].isDirectory()) //遍历现在的file数组,此时存放的是原来链表第一个元素路径名下的所有文件和文件夹 list1.add(file1[i]); else list2.add(file1[i]); } } else list2.add(tmp); //这个和第一个if相对应,即如果这个目录下存的是文件的话,直接加到list2链表中 } } public void loadfile() throws IOException{ //此处定义一个方法,这个方法是遍历list2链表,即存放所有文件的路径的链表 while(!list2.isEmpty()){ File tmp =(File)list2.removeFirst(); //获得第一个元素 File f = new File("tmp"); FileInputStream files = new FileInputStream(f); //定义一个文件输出流 String read = null ; //声明一个字符串read,用来存放从文件里读到的所有数据,这里如果不初始化的话会报错 for(int j = 0;j < f.length();j++) { read = String.valueOf(files.read()); } String [] lines = read.split("\n"); //定义一个行数组,用来存放每一行的数据; files.close(); } } } 这里遇到一个瓶颈,是这样的,我的比对思想是把文件夹得目录存到list1中,把文件的属性存到list2中,这个是方法files干的活,然后我得比较文件的差异,于是loadfile这个方法就先从list2这个存放了文件路径的链表开始遍历,然后最后把链表里第一个元素(也即是第一个文件)里的内容放到一个lines数组里(这个比对思想是按行比较),但是问题就来了,那么被比对的另外一个文件该怎么办呢,这个lines数组每循环一次就会被更新一次,这个该怎么办呢 拜托了,各位
个别生僻字在richtextbox里不能显示
个别生僻字在richtextbox里不能显示,显示为空白 我用两种方式都不可以, 1 richTextBox1.LoadFile("c:\\test.txt", RichTextBoxStreamType.UnicodePlainText)//文件是 unicode编码 2 string content=文本内容; richTextBox1.text=content; 线索 在 textbox里是能显示的,这个生僻字 textbox里被认为长度是2 请高手帮我瞧瞧是怎么了
c语言使用malloc导致程序退出,问题zai第37行到第50行
``` #include<stdio.h> #include<stdlib.h> #include<string.h> #define strcpy strcpy_s //定义基本结构体 struct sorenote { int number; //学号 char name[10]; //姓名 float chinese; //语文成绩 float mathmatic; //数学成绩 float english; //英语成绩 struct sorenote *next=NULL; }; typedef struct sorenote sore; //链表节点计数 int jishu(sore*p) { int n = 0; while (p!=NULL) { n = n + 1; p = p->next; } return n; } //输入或添加学生信息 sore *shuru(sore*head) { sore *p1, *p2, *p3; p2 = head; if (head != NULL) { p2 = head;//取链表头指针 while (head != NULL) { head = head->next; } p1 = head = (sore*)malloc(sizeof(sore)); } else { p1 = p2 = head = (sore*)malloc(sizeof(sore)); } printf("请输入学生资料(输入0退出)!\n"); while (1) { repeat1: printf("请输入学生学号(学号应大于0):"); scanf_s("%d", &p1->number); while (p1->number < 0) { getchar(); printf("输入错误,请重新输入学生学号(输入0退出):"); scanf_s("%d", &p1->number); } if (p1->number == 0) { return p2; } else { p3 = p2; int n; n=jishu(p3); if (n > 0) { for (int i = 0; i < n; i++) { if (p1->number != p3->number) { p3 = p3->next; } else { printf("学号重复,请重新输入!\n"); goto repeat1; } } } } printf("请输入学生姓名:"); scanf_s("%s", &p1->name,10); printf("请输入语文成绩(0~100):"); scanf_s("%f", &p1->chinese); for (; p1->chinese < 0 || p1->chinese > 100;) { getchar(); printf("输入错误,请重新输入语文成绩:"); scanf_s("%f", &p1->chinese); } printf("请输入数学成绩(0~100):"); scanf_s("%f", &p1->mathmatic); for (; p1->mathmatic < 0 || p1->mathmatic > 100;) { getchar(); printf("输入错误,请重新输入数学成绩:"); scanf_s("%f", &p1->mathmatic); } printf("请输入英语成绩(0~100):"); scanf_s("%f", &p1->english); for (; p1->english < 0 || p1->english> 100;) { getchar(); printf("输入错误,请重新输入英语成绩:"); scanf_s("%f", &p1->english); } p1 = p1->next = (sore*)malloc(sizeof(sore)); } return p2; } //链表按学号排序 sore *paixu(sore *head) { int n, k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->number > p1->number) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按姓名排序 sore *namepaixu(sore *head) { int n,k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (strcmp(max->name , p1->name)>0) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按语文成绩排序 sore *chinesepaixu(sore *head) { int n,k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->chinese > p1->chinese) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按数学成绩排序 sore *mathpaixu(sore *head) { int n,k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->mathmatic > p1->mathmatic) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按英语成绩排序 sore *englishpaixu(sore *head) { int n, k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->english > p1->english) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //生成链表 sore *creatlink() { sore *head=NULL; head = shuru(head); //生成链表,写入链表数据 head = paixu(head); //链表排序 printf("输入学生个数为:%d个!\n",jishu(head)); printf("生成完成,已退出"); return head; } //显示学生信息 void print(sore *head) { int n,k; sore *p; if (head == NULL) { printf("\n没有任何学生资料\n"); } else { printf("%d\n", jishu(head)); printf("-----------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|\n"); printf("-----------------------------------------\n"); p = head; for (; p->next == NULL;) { printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->chinese,p->mathmatic,p->english); printf("-----------------------------------------\n"); p = p->next; } } printf("显示完毕"); } //添加学生数据 sore *add(sore*head) { head = shuru(head); //添加学生数据 head = paixu(head); //链表排序 printf("现在学生数为:%d个!",jishu(head)); return 0; } //查询学生成绩 sore *search(sore *head) { int number; sore *p1; if (head == NULL) { printf("\n没有学生资料!\n"); return head; } while (1) { printf("输入要查询的学生的学号(输入0退出):"); scanf_s("%d", &number); getchar(); if (number == 0) { break; } else { printf("-----------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|\n"); printf("-----------------------------------------\n"); p1 = head; while (p1->number != number && p1->next != NULL) { p1 = p1->next; } if (p1->number == number) { printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n", p1->number, p1->name, p1->chinese, p1->mathmatic, p1->english); printf("-----------------------------------------\n"); } else { printf("%d不存在此学生!\n", number); } } } printf("已经退出!\n"); return 0; } //删除数据 sore *dele(sore *head) { int number; sore *p1,*p2; if (head == NULL) { printf("\n没有学生资料!\n"); return head; } while (1) { printf("输入要删除的学生的学号(输入0退出):"); scanf_s("%d", &number); getchar(); if (number == 0) { break; } else { p1 = head; p2 = head; while (p1->number != number && p1->next != NULL) { p2 = p1; p1 = p1->next; } if (p1->number == number) { p2->next = p1->next; free(p1); } else { printf("%d不存在此学生!\n", number); } } } printf("已经退出!\n"); return head; } //链表排序 sore *sortdata(sore *head) { int n; if (head == NULL) { printf("\n没有任何学生资料!\n"); } else { for (int i = 0; i < 80; i++) { printf("*"); } printf("1按学号排序\t2按姓名排序\t3按语文成绩排序\n"); printf("4按数学成绩排序\t5按英语成绩排序\t\n"); for (int i = 0; i < 80; i++) { printf("*"); } printf("请选择操作:"); scanf_s("%d", &n); getchar(); switch (n) { case 1:head = paixu(head); break; case 2:head = namepaixu(head); break; case 3:head = chinesepaixu(head); break; case 4:head = mathpaixu(head); break; case 5:head = englishpaixu(head); break; default:printf("输入错误请重新输入"); } print(head); } return head; } //保存数据 int save(sore *p1) { int n; FILE *fp; char filepn[20]; //存放文件名及保存路径 printf("请输入文建路径及文件名:"); scanf_s("%s", filepn,20); n = fopen_s(&fp, filepn, "w+"); if (n!=0) { printf("文件无法打开!\n"); return 0; } while (p1 != NULL) { fprintf(fp,"|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n", p1->number, p1->name, p1->chinese, p1->mathmatic, p1->english); p1 = p1->next; } fclose(fp); printf("文件已保存!\n"); return 0; } //从文件读取数据 sore *loadfile() { int n; sore *p1, *p2; char filepn[20]; //存放文件名及保存路径 FILE *fp; printf("请输入文件路径及文件名:"); scanf_s("%s", &filepn,20); n= fopen_s(&fp,filepn, "r+"); if ( n!= 0) { printf("无法打开文件!\n"); return 0; } printf(" 学生成绩管理系统 \n"); printf("-----------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|\n"); printf("-----------------------------------------\n"); p1 = p2 = (sore *)malloc(sizeof(sore)); do { fscanf_s(fp,"|%d\t|%s\t|%f\t|%f\t|%f\t|\n", &p1->number, &p1->name,10, &p1->chinese, &p1->mathmatic, &p1->english); printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n", p1->number, p1->name, p1->chinese, p1->mathmatic, p1->english); printf("-----------------------------------------\n"); p1=p1->next= (sore *)malloc(sizeof(sore)); } while (!feof(fp)); free(p1); fclose(fp); return p2; } //菜单 int menu() { int a=0; int i; printf("\t\t\t\t学生管理系统\n"); printf("\n"); for (i = 0; i < 80; i++) { printf("*"); } printf("\n"); printf("1编辑学生的成绩\t\t\t2显示学生的成绩\t\t\t3查询学生的成绩\n"); printf("4添加学生的成绩\t\t\t5删除学生的成绩\t\t\t6学生成绩排序\n"); printf("7保存学生的成绩\t\t\t8统计学生的成绩\t\t\t9读取学生的成绩\n"); for (i = 0; i < 80; i++) { printf("*"); } printf("\n"); printf("欢迎进入学生成绩管理系统,请选择您说要的操作(选择(0)退出):"); scanf_s("%d", &a); getchar(); return a; } //成绩统计 sore *tongji(sore *head) { float sum1=0, sum2=0, sum3=0; float ave1=0, ave2=0, ave3=0; float max=0, min=0; char maxname[10], minname[10]; sore *p; p = head; int x, y = 0; printf("1个人总分和平均分\t2单科平均分\t3总分最高分和最低分\n"); scanf_s("%d", &x); getchar(); if (head == NULL) { printf("\n没有学生资料!\n"); return 0; } else { switch (x) { case 1: printf("---------------------------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|总分\t|平均分\t|\n"); printf("---------------------------------------------------------\n"); while (p != NULL) { sum1 = p->chinese + p->mathmatic + p->english; ave1 = sum1 / 3; printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n", p->number, p->name, p->chinese, p->mathmatic, p->english, sum1, ave1); printf("---------------------------------------------------------\n"); p = p->next; } break; case 2: while (p != NULL) { sum1 = sum1 + p->chinese; sum2 = sum2 + p->mathmatic; sum3 = sum3 + p->english; } y = jishu(head); ave1 = sum1 / y; ave2 = sum2 / y; ave3 = sum3 / y; printf("语文平均分是:%.1f\n", ave1); printf("数学平均分是:%.1f\n", ave2); printf("英语平均分是:%.1f\n", ave3); break; case 3: for (int i = 0; i < jishu(head); i++) { sum1 = p->chinese + p->mathmatic + p->english; if (max < sum1) { max = sum1; strcpy(maxname, p->name); } if (min < sum1) { min = sum1; strcpy(minname, p->name); } p = p->next; } printf("最高分为:%.1f,姓名:%s\n", max, maxname); printf("最低分为:%.1f,姓名:%s\n", min, minname); break; default:printf("输入错误,请重新输入!\n"); } } return 0; } //主函数 int main() { int k; sore *head =NULL,*stu=NULL; k = 100; while (k!=0) { k = menu(); switch (k) { case 1:head = creatlink(); break; case 2:print(head); break; case 3:search(head); break; case 4:head = add(head); break; case 5:head = dele(head); break; case 6:head = sortdata(head); break; case 7:save(head); break; case 8:tongji(head); break; case 9:head = loadfile(); break; case 0:return 0; default:printf("输入错误,请重新输入!\n"); } } } ```
请问大家c#窗体设计菜单打开文件功能时打不开想要打开的文件是为什么?
请问大家c#窗体设计菜单打开文件功能时打不开想要打开的文件是为什么 代码 private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) { fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取文件位置 richTextBox.LoadFile(fileName + @"\tt.txt"); } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取文件位置 richTextBox.SaveFile(fileName + "\\tt.txt"); }
c语言使用malloc导致程序退出,问题在第37行到第50行
``` #include<stdio.h> #include<stdlib.h> #include<string.h> #define strcpy strcpy_s //定义基本结构体 struct sorenote { int number; //学号 char name[10]; //姓名 float chinese; //语文成绩 float mathmatic; //数学成绩 float english; //英语成绩 struct sorenote *next=NULL; }; typedef struct sorenote sore; //链表节点计数 int jishu(sore*p) { int n = 0; while (p!=NULL) { n = n + 1; p = p->next; } return n; } //输入或添加学生信息 sore *shuru(sore*head) { sore *p1, *p2, *p3; p2 = head; if (head != NULL) { p2 = head;//取链表头指针 while (head != NULL) { head = head->next; } p1 = head = (sore*)malloc(sizeof(sore)); } else { p1 = p2 = head = (sore*)malloc(sizeof(sore)); } printf("请输入学生资料(输入0退出)!\n"); while (1) { repeat1: printf("请输入学生学号(学号应大于0):"); scanf_s("%d", &p1->number); while (p1->number < 0) { getchar(); printf("输入错误,请重新输入学生学号(输入0退出):"); scanf_s("%d", &p1->number); } if (p1->number == 0) { return p2; } else { p3 = p2; int n; n=jishu(p3); if (n > 0) { for (int i = 0; i < n; i++) { if (p1->number != p3->number) { p3 = p3->next; } else { printf("学号重复,请重新输入!\n"); goto repeat1; } } } } printf("请输入学生姓名:"); scanf_s("%s", &p1->name,10); printf("请输入语文成绩(0~100):"); scanf_s("%f", &p1->chinese); for (; p1->chinese < 0 || p1->chinese > 100;) { getchar(); printf("输入错误,请重新输入语文成绩:"); scanf_s("%f", &p1->chinese); } printf("请输入数学成绩(0~100):"); scanf_s("%f", &p1->mathmatic); for (; p1->mathmatic < 0 || p1->mathmatic > 100;) { getchar(); printf("输入错误,请重新输入数学成绩:"); scanf_s("%f", &p1->mathmatic); } printf("请输入英语成绩(0~100):"); scanf_s("%f", &p1->english); for (; p1->english < 0 || p1->english> 100;) { getchar(); printf("输入错误,请重新输入英语成绩:"); scanf_s("%f", &p1->english); } p1 = p1->next = (sore*)malloc(sizeof(sore)); } return p2; } //链表按学号排序 sore *paixu(sore *head) { int n, k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->number > p1->number) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按姓名排序 sore *namepaixu(sore *head) { int n,k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (strcmp(max->name , p1->name)>0) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按语文成绩排序 sore *chinesepaixu(sore *head) { int n,k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->chinese > p1->chinese) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按数学成绩排序 sore *mathpaixu(sore *head) { int n,k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->mathmatic > p1->mathmatic) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //链表按英语成绩排序 sore *englishpaixu(sore *head) { int n, k; n = jishu(head); float fen; char t[10]; sore *p1, *p3, *max; p1 = head; p3 = head; //冒泡排序学号 for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { max = p1; p1 = p1->next; if (max->english > p1->english) { //交换节点学号 k = max->number; max->number = p1->number; p1->number = k; //交换节点姓名 strcpy(t, max->name); strcpy(max->name, p1->name); strcpy(p1->name, t); //交换节点语数外成绩 fen = max->chinese; max->chinese = p1->chinese; p1->chinese = fen; fen = max->mathmatic; max->mathmatic = p1->mathmatic; p1->mathmatic = fen; fen = max->english; max->english = p1->english; p1->english = fen; } } max = head; p1 = head; } return head; } //生成链表 sore *creatlink() { sore *head=NULL; head = shuru(head); //生成链表,写入链表数据 head = paixu(head); //链表排序 printf("输入学生个数为:%d个!\n",jishu(head)); printf("生成完成,已退出"); return head; } //显示学生信息 void print(sore *head) { int n,k; sore *p; if (head == NULL) { printf("\n没有任何学生资料\n"); } else { printf("%d\n", jishu(head)); printf("-----------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|\n"); printf("-----------------------------------------\n"); p = head; for (; p->next == NULL;) { printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->chinese,p->mathmatic,p->english); printf("-----------------------------------------\n"); p = p->next; } } printf("显示完毕"); } //添加学生数据 sore *add(sore*head) { head = shuru(head); //添加学生数据 head = paixu(head); //链表排序 printf("现在学生数为:%d个!",jishu(head)); return 0; } //查询学生成绩 sore *search(sore *head) { int number; sore *p1; if (head == NULL) { printf("\n没有学生资料!\n"); return head; } while (1) { printf("输入要查询的学生的学号(输入0退出):"); scanf_s("%d", &number); getchar(); if (number == 0) { break; } else { printf("-----------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|\n"); printf("-----------------------------------------\n"); p1 = head; while (p1->number != number && p1->next != NULL) { p1 = p1->next; } if (p1->number == number) { printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n", p1->number, p1->name, p1->chinese, p1->mathmatic, p1->english); printf("-----------------------------------------\n"); } else { printf("%d不存在此学生!\n", number); } } } printf("已经退出!\n"); return 0; } //删除数据 sore *dele(sore *head) { int number; sore *p1,*p2; if (head == NULL) { printf("\n没有学生资料!\n"); return head; } while (1) { printf("输入要删除的学生的学号(输入0退出):"); scanf_s("%d", &number); getchar(); if (number == 0) { break; } else { p1 = head; p2 = head; while (p1->number != number && p1->next != NULL) { p2 = p1; p1 = p1->next; } if (p1->number == number) { p2->next = p1->next; free(p1); } else { printf("%d不存在此学生!\n", number); } } } printf("已经退出!\n"); return head; } //链表排序 sore *sortdata(sore *head) { int n; if (head == NULL) { printf("\n没有任何学生资料!\n"); } else { for (int i = 0; i < 80; i++) { printf("*"); } printf("1按学号排序\t2按姓名排序\t3按语文成绩排序\n"); printf("4按数学成绩排序\t5按英语成绩排序\t\n"); for (int i = 0; i < 80; i++) { printf("*"); } printf("请选择操作:"); scanf_s("%d", &n); getchar(); switch (n) { case 1:head = paixu(head); break; case 2:head = namepaixu(head); break; case 3:head = chinesepaixu(head); break; case 4:head = mathpaixu(head); break; case 5:head = englishpaixu(head); break; default:printf("输入错误请重新输入"); } print(head); } return head; } //保存数据 int save(sore *p1) { int n; FILE *fp; char filepn[20]; //存放文件名及保存路径 printf("请输入文建路径及文件名:"); scanf_s("%s", filepn,20); n = fopen_s(&fp, filepn, "w+"); if (n!=0) { printf("文件无法打开!\n"); return 0; } while (p1 != NULL) { fprintf(fp,"|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n", p1->number, p1->name, p1->chinese, p1->mathmatic, p1->english); p1 = p1->next; } fclose(fp); printf("文件已保存!\n"); return 0; } //从文件读取数据 sore *loadfile() { int n; sore *p1, *p2; char filepn[20]; //存放文件名及保存路径 FILE *fp; printf("请输入文件路径及文件名:"); scanf_s("%s", &filepn,20); n= fopen_s(&fp,filepn, "r+"); if ( n!= 0) { printf("无法打开文件!\n"); return 0; } printf(" 学生成绩管理系统 \n"); printf("-----------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|\n"); printf("-----------------------------------------\n"); p1 = p2 = (sore *)malloc(sizeof(sore)); do { fscanf_s(fp,"|%d\t|%s\t|%f\t|%f\t|%f\t|\n", &p1->number, &p1->name,10, &p1->chinese, &p1->mathmatic, &p1->english); printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n", p1->number, p1->name, p1->chinese, p1->mathmatic, p1->english); printf("-----------------------------------------\n"); p1=p1->next= (sore *)malloc(sizeof(sore)); } while (!feof(fp)); free(p1); fclose(fp); return p2; } //菜单 int menu() { int a=0; int i; printf("\t\t\t\t学生管理系统\n"); printf("\n"); for (i = 0; i < 80; i++) { printf("*"); } printf("\n"); printf("1编辑学生的成绩\t\t\t2显示学生的成绩\t\t\t3查询学生的成绩\n"); printf("4添加学生的成绩\t\t\t5删除学生的成绩\t\t\t6学生成绩排序\n"); printf("7保存学生的成绩\t\t\t8统计学生的成绩\t\t\t9读取学生的成绩\n"); for (i = 0; i < 80; i++) { printf("*"); } printf("\n"); printf("欢迎进入学生成绩管理系统,请选择您说要的操作(选择(0)退出):"); scanf_s("%d", &a); getchar(); return a; } //成绩统计 sore *tongji(sore *head) { float sum1=0, sum2=0, sum3=0; float ave1=0, ave2=0, ave3=0; float max=0, min=0; char maxname[10], minname[10]; sore *p; p = head; int x, y = 0; printf("1个人总分和平均分\t2单科平均分\t3总分最高分和最低分\n"); scanf_s("%d", &x); getchar(); if (head == NULL) { printf("\n没有学生资料!\n"); return 0; } else { switch (x) { case 1: printf("---------------------------------------------------------\n"); printf("|学号\t|姓名\t|语文\t|数学\t|英语\t|总分\t|平均分\t|\n"); printf("---------------------------------------------------------\n"); while (p != NULL) { sum1 = p->chinese + p->mathmatic + p->english; ave1 = sum1 / 3; printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n", p->number, p->name, p->chinese, p->mathmatic, p->english, sum1, ave1); printf("---------------------------------------------------------\n"); p = p->next; } break; case 2: while (p != NULL) { sum1 = sum1 + p->chinese; sum2 = sum2 + p->mathmatic; sum3 = sum3 + p->english; } y = jishu(head); ave1 = sum1 / y; ave2 = sum2 / y; ave3 = sum3 / y; printf("语文平均分是:%.1f\n", ave1); printf("数学平均分是:%.1f\n", ave2); printf("英语平均分是:%.1f\n", ave3); break; case 3: for (int i = 0; i < jishu(head); i++) { sum1 = p->chinese + p->mathmatic + p->english; if (max < sum1) { max = sum1; strcpy(maxname, p->name); } if (min < sum1) { min = sum1; strcpy(minname, p->name); } p = p->next; } printf("最高分为:%.1f,姓名:%s\n", max, maxname); printf("最低分为:%.1f,姓名:%s\n", min, minname); break; default:printf("输入错误,请重新输入!\n"); } } return 0; } //主函数 int main() { int k; sore *head =NULL,*stu=NULL; k = 100; while (k!=0) { k = menu(); switch (k) { case 1:head = creatlink(); break; case 2:print(head); break; case 3:search(head); break; case 4:head = add(head); break; case 5:head = dele(head); break; case 6:head = sortdata(head); break; case 7:save(head); break; case 8:tongji(head); break; case 9:head = loadfile(); break; case 0:return 0; default:printf("输入错误,请重新输入!\n"); } } } ```
Direct2D 绘制大图 20000*2048失败,求教为什么?
``` C++ BOOL CMyDirect2D::LoadFile(LPCTSTR filename, CComPtr<ID2D1Bitmap> &pBitmap) { IWICBitmapDecoder *pDecoder = NULL; IWICBitmapFrameDecode *pSource = NULL; IWICFormatConverter *pConverter = NULL; IWICBitmapScaler *pScaler = NULL; //创建解码器 if (S_OK != m_pIWICFactory->CreateDecoderFromFilename(filename, NULL,//解码器 默认使用NULL GENERIC_READ, //对象访问权限 WICDecodeMetadataCacheOnLoad, //加载解码器时缓存元数据 WICDecodeMetadataCacheOnDemand -- 需要时加载 &pDecoder)) { MessageBox(NULL, L"CreateDecoderFromFilename failed!", L"Error", MB_OK); return FALSE; } //获得图像 pDecoder->GetFrame(0, &pSource); //创建转换器 m_pIWICFactory->CreateFormatConverter(&pConverter); //初始化转换器 -- 将帧转换为32bpppbgra HRESULT hr = pConverter->Initialize(pSource, //输入图像 GUID_WICPixelFormat32bppPBGRA, //目标像素格式 WICBitmapDitherTypeErrorDiffusion, //指定抖动模式 NULL, //调色板 0.f, //alpha阈值 WICBitmapPaletteTypeCustom //调色板转换类型 ); pBitmap = nullptr;//释放旧图片资源 //创建位图 hr = m_pRenderTarget->CreateBitmapFromWicBitmap( pConverter, NULL,//要创建的位图的像素格式和dpi。像素格式必须与wicbitmapsource的像素格式匹配,否则方法将失败。 //为了防止不匹配,可以传递null或传递从调用d2d1::pixelformat助手函数获得的值,而无需指定任何参数值。 //如果dpix和dpiy均为0.0f,则使用默认dpi 96 &pBitmap ); if (S_OK != hr) { MessageBox(NULL, L"CreateBitmapFromWicBitmap failed!", L"Error", MB_OK); SAFE_RELEASE(pDecoder); SAFE_RELEASE(pSource); return FALSE; } SAFE_RELEASE(pDecoder); SAFE_RELEASE(pSource); SAFE_RELEASE(pConverter); SAFE_RELEASE(pScaler); return TRUE; } ``` --- ## 问题代码出现在 CreateBitmapFromWicBitmap 上面 ## hr 的错误是参数不正确,经过检查 上一步已经获得到正确的 pConverter 可是让然告诉我参数不正确,表示疑问。 ## 而且还有一个问题 同样的代码 我加载一张小图 10000* 2048都是可以的,偏偏这个20000 * 2048的不行,求助各路大牛支援我一下。 ## 在此深表感谢
anycad.net 这个skp的sdk有人用过吗? 或者有其他的替代品吗?
使用anycad进行开发的时候,有好多的问题,而且网上的资源特别少,都灭有弄明白到底怎么回事,一直都是运行不了 ``` OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "SKP (*.skp)|*.skp|All Files(*.*)|*.*"; if (DialogResult.OK != dlg.ShowDialog()) return; ModelReader reader = new ModelReader(); GroupSceneNode node = reader.LoadFile(new AnyCAD.Platform.Path(dlg.FileName)); if (node != null) { renderView.ShowSceneNode(node); } ``` 打开的是一个skp的文件。但是走到if判断node是不是为null的时候就跳过去了。因为node是null 有没有人知道怎么回事?
C# 接口 反射 奇怪的问题
1、定义一个接口,用于获取用户的功能点。因为有些项目中甲方有自己的权限平台,所以这里反接口开放出来。 public interface IUserFuns { List<string> GetFunCodes(string userID); } 2。我的系统中也自己做了一套授权功能。实现1中的接口 public List<string> GetFunCodes(string userID) { List<string> modules = new List<string>(); modules.Add("0000"); modules.Add("0001"); modules.Add("0002"); modules.Add("0003"); modules.Add("0004"); return modules; } } 这只是用来测试的。 3、 接口开放在配置文件里, <userFuns fileName="NewTest.exe" typeName="NewTest.BLL.UserFun"></userFuns> <!--<userFuns fileName="MvcApplication.dll" typeName="MvcApplication.BLL.UserFunction.BaseUserFun"></userFuns>--> 4、根据配置文件的信息,获取功能点权限 //获取类信息 动态调用 Assembly asb = Assembly.LoadFile(assName); object obj = asb.CreateInstance(section.TypeName); if (typeof(IUserFuns).IsInstanceOfType(obj)) { IUserFuns module = obj as IUserFuns; listCodes = module.GetFunCodes(userID); } assName是实现接口的文件的全路径名称 section.TypeName是实现接口的类的全名称,命名空间命+类名 5、问题:4中的判断,if (typeof(IUserFuns).IsInstanceOfType(obj)) 如果obj跟IUserFuns在同一个项目中typeof(IUserFuns).IsInstanceOfType(obj)就是false,如果obj跟IUserFuns不在同一个项目中,typeof(IUserFuns).IsInstanceOfType(obj)就是true,这是为什么?
VS/MFC 如何使用richtextbox
richtextbox的LoadFile和SaveFile的第二个参数该如何填写?函数声明如下: void LoadFile(LPCTSTR bstrFilename,VARIANT vFileType); void SaveFile(LPCTSTR bstrFilename,VARIANT vFileType); 两个参数一样,第一个参数是文件名,就是不知道第二个参数是什么意思,百度谷歌了很多,都没有找到想要的答案,请大牛指导一下,谢谢,感激!
关于游戏物理引擎bullet中导入.bullet文件的问题
我尝试用如下的方式导入testhollowcylinder2.bullet文件时,不会显示已经导入的物体。但是如果我换成导入testhollowcylinder.bullet(这个应该是bullet自带的文件)又可以显示有物体。这是因为我什么地方弄错了的原因么? ``` import = new btBulletWorldImporter(m_dynamicsWorld); import->loadFile("testhollowcylinder2.bullet"); int num = import->getNumRigidBodies(); std::cout << num << std::endl; btRigidBody* body = (btRigidBody*)import->getRigidBodyByIndex(0); body->setWorldTransform(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 0, 0))); pdemo->getSoftDynamicsWorld()->addRigidBody(body); ``` 本人是刚入门bullet,还希望有大佬能够指点一下,如果有具体的供学习的样例就更好不过了。因为自己现在是一点一点乱摸索,人有点懵。 用的VS2015,bullet2.87
ant实现macrodef递归调用,property无法更新导致死循环,求助
在代码中: <macrodef name="wait_for_complete"/> 1.使用 <get />标签获取一个url的文件 2.然后用<loadfile property="make_state" srcFile="${filename}"/>获取文件的内容 3.我会根据make_state的值去判断是否递归调用,然而我们都知道property是常量,所以我的make_state的值会一直满足递归条件导致死循环 4.后来我就设置了一个<attribute name="make.state" default="making"/>想每次递归调用的时候传一个值进来作为变量的名字 于是修改为 <loadfile property="@{make.state}" srcFile="${filename}" /> 在递归调用的时候就想传一个不断变化的值进去作为变量的名字 <wait_for_complete make.state="${....}"> 5.我尝试过时间戳啥的,比如${DSTAMP} ${TSTAMP} 但是这些都是在脚本调用的时候值就固定了,所以我还是没有办法更新变量的名字 6.综上,我无法更新property属性make_state的值,也无法动态变化property的名字,因为接触ant不久,很多不了解,请大神指点一二,多谢多谢。
web service访问数量控制
详细功能:客户端是WPF,服务端是Web Service(C#),客户端请求查询服务器端是否有更新的版本,若有则下载更新。 开发工具:VS2013,在管理员权限下运行。 开发及测试环境:IIS6.0,电脑内核数量为4,逻辑处理器数量为8。 相关参数设置:IIS管理器下设置-应用程序池-网站的最大工作进程数为默认值1.客户端与Web Service的超时时间都是120秒。测试用的更新包大小为3101KB。采用log4net在服务器端记录日志。 问题描述:由于最终将发布在远程服务器上,带宽有限制,120秒的时间内,最多只能保证大约23个请求成功下载,其他的请求不可能成功。【计算方法:带宽*120秒/3101KB=25个。并且经测试,几乎都是保持在23个请求可以成功下载更新。(附:远程服务器环境为核心数2,线程数2,IIS6.0)】 于是想用Application["CountOnline"]来统计正在请求下载的客户端数量,假设这个数量已经超过了23,如果再有新的下载请求,那么就立刻返回“服务器忙”异常消息;否则就下载更新。每有一次连接请求,那么Application["CountOnline"]值加1;请求结束之后,Application["CountOnline"]值减1。采用多线程同时请求下载来模拟多客户端进行测试。 1、把web service发布到本地的开发机器的虚拟目录下,发现Application["CountOnline"]的值最大为3,根本不能突破3。注:本地环境下测试,无带宽限制。把Web Service发布到远程服务器上,Application["CountOnline"]最大为1。 2、若不发布web service,直接在WPF项目下,添加服务引用——发现“解决方案下的服务”,然后运行测试代码,发现Application["CountOnline"]的值最大可以达到8. 3、修改IIS管理器下设置-应用程序池-网站的最大工作进程数为10,此时若再引用本地的虚拟目录下的服务,Application["CountOnline"]的最大值依然是3,并且由于是最大工作进程数的限制变为10,导致记录的日志信息不完全。同样的,服务器端Application["CountOnline"]最大值依然是1. Web Service主要代码如下: [WebMethod(Description = "", EnableSession = true)] public byte[] LoadFile(string software) { string filePath = Server.MapPath("Software/") + software; FileStream fs = null; if (File.Exists(filePath)) { try { log.Info(String.Format("线程{0}进入请求时候,Application[\"count\"]:{1}", System.Threading.Thread.CurrentThread.ManagedThreadId, Application["CountOnline"])); if (!(Application["CountOnline"] == null || (int)Application["CountOnline"] <= 23)) { throw new SoapException("服务器正忙,请稍后再试!", SoapException.ServerFaultCode); } fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); return ConvertStreamToByteBuffer(fs); } catch (SoapException ex) { log.Error(String.Format("---------请求已经达到最大限度。")); throw new SoapException("服务器正忙,请稍后再试!", SoapException.ServerFaultCode); } catch (Exception ex) { log.Error(String.Format("异常消息:{0}{1}堆栈:{2}{0}相关内容:{3}", ex.Message, Environment.NewLine, ex.StackTrace, ex.ToString())); throw new SoapException(ex.ToString(), SoapException.ServerFaultCode); } finally { if(fs!=null) { fs.Flush(); fs.Close(); } log.Info(String.Format("线程{0}执行完毕离开时候,Application[\"count\"]:{1}", System.Threading.Thread.CurrentThread.ManagedThreadId, Application["CountOnline"])); Session.Abandon(); } } else { log.Error(filePath + "文件不存在"); throw new SoapException(filePath + "文件不存在", SoapException.ServerFaultCode); } } public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { if (Application["CountOnline"] == null) { Application["CountOnline"] = 0; } log4net.Config.XmlConfigurator.Configure(new FileInfo("Log4net.config")); } protected void Session_Start(object sender, EventArgs e) { Application.Lock(); int countOnline = (int)Application["CountOnline"]; countOnline++; Application["CountOnline"] = countOnline; Application.UnLock(); } protected void Session_End(object sender, EventArgs e) { Application.Lock(); int countOnline = (int)Application["CountOnline"]; countOnline--; Application["CountOnline"] = countOnline; Application.UnLock(); } } 客户端测试代码主要如下: try { for (int i = 0; i <100; i++) { ThreadWithState tws = new ThreadWithState(i); Thread t = new Thread(new ThreadStart(tws.ThreadProc)); t.Start(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } public class ThreadWithState { private int i; public ThreadWithState( int number) { i = number; } public void ThreadProc() { try { BasicHttpBinding binding = new BasicHttpBinding(); ServiceReference1.WebService1SoapClient ws; binding.MaxReceivedMessageSize = 2147483647; binding.MaxBufferPoolSize = 2147483647; binding.CloseTimeout = new TimeSpan(0,0,120); binding.SendTimeout = new TimeSpan(0, 0, 120); ws = new ServiceReference1.WebService1SoapClient(binding, new EndpointAddress(new Uri("http://192.168.1.91:81/WebService1.asmx"))); System.Diagnostics.Stopwatch spw = new System.Diagnostics.Stopwatch(); spw.Start(); ws.Open(); byte[] file = ws.LoadFile("*****文件名****"); spw.Restart(); string time = System.DateTime.Now.ToString("_yyyy-MM-dd HH-mm-ss_ffff"); string downPath = @"c:\download\" + i + "" + time + ".zip"; FileStream fs = new FileStream(downPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); fs.Write(file, 0, file.Length); fs.Flush(); fs.Dispose(); ws.Abort(); ws.Close(); Console.WriteLine(i + ",写入磁盘完成耗时:" + spw.ElapsedMilliseconds + ",线程id:" + System.Threading.Thread.CurrentThread.ManagedThreadId); } catch(Exception ex) { Console.WriteLine(ex.Message); } } } 每一个新的请求,那么服务端应该都会新开一个线程,为什么我的服务器端的Application["CountOnline"]始终没有什么变化呢。我猜想是不是IIS或者还有哪个地方没有设置呢?还是我的代码有问题?已经在百度上面查询了好久,没有找到答案。请大家帮忙看看。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问